完全免費,簡化版Plotly推出,秒繪各類可視化圖表

2020-12-18   AI科技大本營

原標題:完全免費,簡化版Plotly推出,秒繪各類可視化圖表

作者 | Peter

來源 | Python編程時光

今天給大家推薦一個可視化神器 - Plotly_express ,上手非常的簡單,基本所有的圖都只要一行代碼就能繪出一張非常酷炫的可視化圖。

以下是這個神器的詳細使用方法,文中附含大量的 GIF 動圖示例圖。

環境準備

本文的是在如下環境下測試完成的。

  • Python3.7

  • Jupyter notebook

  • Pandas1.1.3

  • Plotly_express0.4.1

其中 Plotly_express0.4.1 是本文的主角,安裝它非常簡單,只需要使用 pip install 就可以。

$ python3 -m pip install plotly_express

工具概述

在說 plotly_express之前,我們先了解下plotly。Plotly是新一代的可視化神器,由TopQ量化團隊開源。雖然Ploltly功能非常之強大,但是一直沒有得到重視,主要原因還是其設置過於繁瑣。因此,Plotly推出了其簡化接口:Plotly_express,下文中統一簡稱為px。

px是對Plotly.py的一種高級封裝,其內置了很多實用且現代的繪圖模板,用戶只需要調用簡單的API函數即可實用,從而快速繪製出漂亮且動態的可視化圖表。

px是完全免費的,用戶可以任意使用它。最重要的是,px和plotly生態系統的其他部分是完全兼容的。用戶不僅可以在Dash中使用,還能通過Orca將數據導出為幾乎任意文件格式。

官網的學習資料:https://plotly.com/

px的安裝是非常簡單的,只需要通過pip install plotly_express來安裝即可。安裝之後的使用:

import plotly_express as px

開始繪圖

接下來我們通過px中自帶的數據集來繪製各種精美的圖形。

  • gapminder

  • tips

  • wind

3.1 數據集

首先我們看下px中自帶的數據集:

import pandas as pdimport numpy as npimport plotly_express as px # 現在這種方式也可行:import plotly.express as px# 數據集gapminder = px.data.gapmindergapminder.head # 取出前5條數據

我們看看全部屬性值:

3.2 線型圖

線型圖line在可視化製圖中是很常見的。利用px能夠快速地製作線型圖:

# line 圖fig = px.line( gapminder, # 數據集 x="year", # 橫坐標 y="lifeExp", # 縱坐標 color="continent", # 顏色的數據 line_group="continent", # 線性分組 hover_name="country", # 懸停hover的數據 line_shape="spline", # 線的形狀 render_mode="svg" # 生成的圖片模式)fig.show

再來製作面積圖:

# area 圖fig = px.area( gapminder, # 數據集 x="year", # 橫坐標 y="pop", # 縱坐標 color="continent", # 顏色 line_group="country" # 線性組別)fig.show

3.3 散點圖

散點圖的製作調用scatter方法:

指定size參數還能改變每個點的大小:

px.scatter( gapminder2007 # 繪圖DataFrame數據集 ,x="gdpPercap" # 橫坐標 ,y="lifeExp" # 縱坐標 ,color="continent" # 區分顏色 ,size="pop" # 區分圓的大小 ,size_max=60 # 散點大小)

通過指定facet_col、animation_frame參數還能將散點進行分塊顯示:

px.scatter(gapminder # 繪圖使用的數據,x="gdpPercap" # 橫縱坐標使用的數據,y="lifeExp" # 縱坐標數據,color="continent" # 區分顏色的屬性,size="pop" # 區分圓的大小,size_max=60 # 圓的最大值,hover_name="country" # 圖中可視化最上面的名字,animation_frame="year" # 橫軸滾動欄的屬性year,animation_group="country" # 標註的分組,facet_col="continent" # 按照國家country屬性進行分格顯示,log_x=True # 橫坐標表取對數,range_x=[100,100000] # 橫軸取值範圍,range_y=[25,90] # 縱軸範圍,labels=dict(pop="Populations", # 屬性名字的變化,更直觀gdpPercap="GDP per Capital",lifeExp="Life Expectancy"))

3.4 地理數據繪圖

在實際的工作中,我們可能會接觸到中國地圖甚至是全球地圖,使用px也能製作:

px.choropleth( gapminder, # 數據集 locations="iso_alpha", # 配合顏色color顯示 color="lifeExp", # 顏色的欄位選擇 hover_name="country", # 懸停欄位名字 animation_frame="year", # 注釋 color_continuous_scale=px.colors.sequential.Plasma, # 顏色變化 projection="natural earth" # 全球地圖 )

fig = px.scatter_geo(gapminder, # 數據locations="iso_alpha", # 配合顏色color顯示color="continent", # 顏色hover_name="country", # 懸停數據size="pop", # 大小animation_frame="year", # 數據幀的選擇projection="natural earth" # 全球地圖)

fig.show

px.scatter_geo(gapminder, # 數據集locations="iso_alpha", # 配和color顯示顏色color="continent", # 顏色的欄位顯示hover_name="country", # 懸停數據size="pop", # 大小animation_frame="year" # 數據聯動變化的選擇#,projection="natural earth" # 去掉projection參數)

使用line_geo來製圖:

fig = px.line_geo(gapminder2007, # 數據集locations="iso_alpha", # 配合和color顯示數據color="continent", # 顏色projection="orthographic") # 球形的地圖fig.show

3.5 使用內置iris數據

我們先看看怎麼使用px來查看內置數據的文檔:

選擇兩個屬性製圖

選擇兩個屬性作為橫縱坐標來繪製散點圖

fig = px.scatter(iris, # 數據集x="sepal_width", # 橫坐標y="sepal_length" # 縱坐標)fig.show

通過color參數來顯示不同的顏色:

3.6 聯合分布圖

我們一個圖形中能夠將散點圖和直方圖組合在一起顯示:

px.scatter( iris, # 數據集 x="sepal_width", # 橫坐標 y="sepal_length", # 縱坐標 color="species", # 顏色 marginal_x="histogram", # 橫坐標直方圖 marginal_y="rug" # 細條圖)

3.7 小提琴圖

小提琴圖能夠很好的顯示數據的分布和誤差情況,一行代碼利用也能顯示小提琴圖:

px.scatter( iris, # 數據集 x="sepal_width", # 橫坐標 y="sepal_length", # 縱坐標 color="species", # 顏色 marginal_y="violin", # 縱坐標小提琴圖 marginal_x="box", # 橫坐標箱型圖 trendline="ols" # 趨勢線)

3.8 散點矩陣圖

px.scatter_matrix( iris, # 數據 dimensions=["sepal_width","sepal_length","petal_width","petal_length"], # 維度選擇 color="species") # 顏色

3.9 平行坐標圖

px.parallel_coordinates(iris, # 數據集color="species_id", # 顏色labels={"species_id":"Species", # 各種標籤值"sepal_width":"Sepal Width","sepal_length":"Sepal Length","petal_length":"Petal Length","petal_width":"Petal Width"},color_continuous_scale=px.colors.diverging.Tealrose,color_continuous_midpoint=2)

3.10 箱體誤差圖

# 對當前值加上下兩個誤差值iris["e"] = iris["sepal_width"] / 100px.scatter(iris, # 繪圖數據集x="sepal_width", # 橫坐標y="sepal_length", # 縱坐標color="species", # 顏色值error_x="e", # 橫軸誤差error_y="e" # 縱軸誤差)

3.11 等高線圖

等高線圖反映數據的密度情況:

px.density_contour( iris, # 繪圖數據集 x="sepal_width", # 橫坐標 y="sepal_length", # 縱坐標值 color="species" # 顏色)

等高線圖和直方圖的倆和使用:

px.density_contour( iris, # 數據集 x="sepal_width", # 橫坐標值 y="sepal_length", # 縱坐標值 color="species", # 顏色 marginal_x="rug", # 橫軸為線條圖 marginal_y="histogram" # 縱軸為直方圖 )

3.12 密度熱力圖

px.density_heatmap(iris, # 數據集x="sepal_width", # 橫坐標值y="sepal_length", # 縱坐標值marginal_y="rug", # 縱坐標值為線型圖marginal_x="histogram" # 直方圖)

3.13 並行類別圖

在接下來的圖形中我們使用的小費tips實例,首先是導入數據:

fig = px.parallel_categories(tips, # 數據集 color="size", # 顏色color_continuous_scale=px.colors.sequential.Inferno) # 顏色變化取值fig.show

3.14 柱狀圖

fig = px.bar(tips, # 數據集x="sex", # 橫軸y="total_bill", # 縱軸color="smoker", # 顏色參數取值barmode="group", # 柱狀圖模式取值facet_row="time", # 行取值facet_col="day", # 列元素取值category_orders={"day": ["Thur","Fri","Sat","Sun"], # 分類順序"time":["Lunch", "Dinner"]})fig.show

3.15 直方圖

fig = px.histogram(tips, # 繪圖數據集x="sex", # 橫軸為性別y="tip", # 縱軸為費用histfunc="avg", # 直方圖顯示的函數color="smoker", # 顏色barmode="group", # 柱狀圖模式facet_row="time", # 行取值facet_col="day", # 列取值category_orders={ # 分類順序"day":["Thur","Fri","Sat","Sun"],"time":["Lunch","Dinner"]})

fig.show

3.16 箱型圖

箱型圖也是現實數據的誤差和分布情況:

# notched=True顯示連接處的錐形部分px.box(tips, # 數據集x="day", # 橫軸數據y="total_bill", # 縱軸數據color="smoker", # 顏色notched=True) # 連接處的錐形部分顯示出來

px.box( tips, # 數據集 x="day", # 橫軸 y="total_bill", # 縱軸 color="smoker", # 顏色# notched=True # 隱藏參數 )

再來畫一次小提琴圖:

px.violin( tips, # 數據集 x="smoker", # 橫軸坐標 y="tip", # 縱軸坐標 color="sex", # 顏色參數取值 box=True, # box是顯示內部的箱體 points="all", # 同時顯示數值點 hover_data=tips.columns) # 結果中顯示全部數據

3.17 極坐標圖

在這裡我們使用的是內置的wind數據:

散點極坐標圖

線性極坐標圖

fig = px.line_polar(wind, # 數據集r="frequency", # 半徑theta="direction", # 角度color="strength", # 顏色line_close=True, # 線性閉合color_discrete_sequence=px.colors.sequential.Plasma_r) # 顏色變化fig.show

柱狀極坐標圖

fig = px.bar_polar(wind, # 數據集r="frequency", # 半徑theta="direction", # 角度color="strength", # 顏色template="plotly_dark", # 主題color_discrete_sequence=px.colors.sequential.Plasma_r) # 顏色變化fig.show

顏色面板

在px中有很多的顏色可以供選擇,提供了一個顏色面板:

px.colors.qualitative.swatches

px.colors.sequential.swatches

主題

px中存在3種主題:

  • plotly

  • plotly_white

  • plotly_dark

px.scatter(iris, # 數據集x="sepal_width", # 橫坐標值y="sepal_length", # 縱坐標取值color="species", # 顏色marginal_x="box", # 橫坐標為箱型圖marginal_y="histogram", # 縱坐標為直方圖height=600, # 高度trendline="ols", # 顯示趨勢線template="plotly") # 主題

px.scatter( iris, # 數據集 x="sepal_width", # 橫坐標值 y="sepal_length", # 縱坐標取值 color="species", # 顏色 marginal_x="box", # 橫坐標為箱型圖 marginal_y="histogram", # 縱坐標為直方圖 height=600, # 高度 trendline="ols", # 顯示趨勢線 template="plotly_white") # 主題

px.scatter(iris, # 數據集x="sepal_width", # 橫坐標值y="sepal_length", # 縱坐標取值color="species", # 顏色marginal_x="box", # 橫坐標為箱型圖marginal_y="histogram", # 縱坐標為直方圖height=600, # 高度trendline="ols", # 顯示趨勢線template="plotly_dark") # 主題

總結

本文中利用大量的篇幅講解了如何通過plotly_express來繪製:柱狀圖、線型圖、散點圖、小提琴圖、極坐標圖等各種常見的圖形。通過觀察上面Plotly_express繪製圖形過程,我們不難發現它有三個主要的優點:

  • 快速出圖,少量的代碼就能滿足多數的製圖要求。基本上都是幾個參數的設置我們就能快速出圖

  • 圖形漂亮,繪製出來的可視化圖形顏色亮麗,也有很多的顏色供選擇。

  • 圖形是動態可視化的。文章中圖形都是截圖,如果是在Jupyter notebook中都是動態圖形

希望通過本文的講解能夠幫助堵住快速入門plotly_express可視化神器。