Plotly可視化地位岌岌可危?Pandas內(nèi)置繪圖大全來襲!
公眾號:尤而小屋
作者:Peter
編輯:Peter
大家好,我是Peter~
之前寫過很多關(guān)于Pandas的文章都是介紹如何使用Pandas來處理數(shù)據(jù),這的確是它的強(qiáng)項。
對比SQL,學(xué)習(xí)Pandas操作:groupby機(jī)制
電商用戶復(fù)購數(shù)據(jù)實戰(zhàn):圖解Pandas的移動函數(shù)shift
其實,Pandas還有一個內(nèi)置的功能:繪圖。你沒有看錯:Pandas自身就是可以繪圖的。本文詳細(xì)介紹基于Pandas的快速繪圖方法。

Pandas內(nèi)置繪圖

參數(shù)
下面是常見的參數(shù)及解釋,詳細(xì)的請參考官網(wǎng):https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html
DataFrame.plot(x=None,?y=None,???#?指數(shù)據(jù)框列的標(biāo)簽或位置參數(shù)
???????????????kind='line',??#?圖的類型:line bar barh kde area scatter hist box等
???????????????ax=None,??#?坐標(biāo)軸
???????????????subplots=False,???#?是否繪制子圖?
???????????????sharex=None,??#?是否共享xy軸
???????????????sharey=False,?
???????????????layout=None,??#?布局
???????????????figsize=None,??#?大小
???????????????use_index=True,??#?索引
???????????????title=None,??#?圖形標(biāo)題
???????????????grid=None,??#?網(wǎng)格線
???????????????legend=True,???#?圖例
???????????????style=None,??#?風(fēng)格
???????????????logx=False,???#?對數(shù)化
???????????????logy=False,?
???????????????loglog=False,??#?開啟對數(shù)化
???????????????xticks=None,???#?設(shè)置x、y軸刻度值,序列形式(比如列表)
???????????????yticks=None,?
???????????????xlim=None,???#?設(shè)置坐標(biāo)軸的范圍,列表或元組形式
???????????????ylim=None,?
???????????????rot=None,??#?設(shè)置軸標(biāo)簽(軸刻度)的顯示旋轉(zhuǎn)度數(shù)
???????????????xerr=None,??#?誤差
???????????????secondary_y=False,????#?開啟第二y軸(右y軸)
???????????????sort_columns=False,???#?以字母表順序繪制各列,默認(rèn)使用前列順序
???????????????**kwds)
模擬數(shù)據(jù)
本文中主要使用的一份模擬數(shù)據(jù):根據(jù)numpy庫模擬生成的

折線圖
繪制最基礎(chǔ)的圖形:折線圖
基礎(chǔ)折線圖

禁用圖例
就是上圖右上角的col1、col2、col3
#?禁用圖例Legend
df.plot(legend=False,kind="line")
plt.show

調(diào)整兩個軸的名稱
#?設(shè)置兩個軸的名稱
df.plot(kind="line",xlabel="x_new",ylabel="y_new")
plt.show

柱狀圖
基礎(chǔ)柱狀圖
#?寫法1
df.col1.plot(kind="bar",title="use?pandas?to?make?bar")
#?寫法2
df["col1"].plot(kind="bar",title="use?pandas?to?make?bar")
#?寫法3
df.col1.plot.bar(title="use?pandas?to?make?bar")
plt.show()

多元素柱狀圖

堆疊柱狀圖

水平柱狀圖

當(dāng)然,也可以是堆疊的形式:

散點圖
基礎(chǔ)散點圖

改變大小和顏色
df.plot(kind="scatter",?#?指定類型
????????x="col1",?y="col3",??#?指定兩個軸
????????s=df["col2"]?*500,??#?點的大小
????????c="r"??#?點的顏色
???????)??
plt.show()

帶顏色棒的散點圖

餅圖
針對Series
為了繪制餅圖,模擬了一份新數(shù)據(jù):

series.plot(kind="pie",figsize=(6,6))
plt.show()

針對DataFrame
同樣的,再繪制一份數(shù)據(jù):


箱型圖
基礎(chǔ)箱型圖

自定義箱型圖
#?自定義顏色
color?=?{"boxes":?"DarkGreen",
?????????"whiskers":?"DarkOrange",
?????????"medians":?"DarkBlue",
?????????"caps":?"Gray"}
df.plot.box(color=color,?sym="r+")
plt.show()

水平箱型圖
#?自定義顏色
color?=?{"boxes":?"DarkGreen",
?????????"whiskers":?"DarkOrange",
?????????"medians":?"DarkBlue",
?????????"caps":?"Gray"}
df.plot.box(color=color,?
????????????vert=False,??#?關(guān)鍵參數(shù)
????????????sym="r+")
plt.show()

使用boxplot繪箱型圖

參數(shù)是同樣適用的:

蜂窩圖
為了繪制不同的蜂窩圖,模擬了一份新數(shù)據(jù):

基礎(chǔ)蜂窩圖

改進(jìn)版蜂窩圖
df1.plot(
????kind="hexbin",
????x="A",
????y="B",
????C="C",??#?顏色深度的表示
????reduce_C_function=np.mean,?#?指定不同聚合參數(shù):mean/max/min/sum/std
????gridsize=30)
plt.show()

直方圖
#?寫法1
df.plot(kind="hist",alpha=0.5)
#?寫法2
df.plot.hist(alpha=0.5)
plt.show()

密度圖
使用 Series.plot.kde() 和 DataFrame.plot.kde() 可以畫出密度圖:
1、針對DataFrame的密度圖

2、針對Series的密度圖

面積圖

多子圖
繪制子圖主要的參數(shù):
subplots: 默認(rèn)False, 如果希望每列繪制子圖, 則賦值為True layout: 子圖的布局, 即畫布被橫豎分為幾塊, 如:(2,3)表示2行3列 figsize: 整個畫布大小
df.plot(subplots=True,
????????layout=(1,3),??#?1行3列
????????figsize=(15,6),
????????kind="bar"
???????)
plt.show()

開啟共享y軸的參數(shù):
df.plot(subplots=True,
????????layout=(1,3),??#?1行3列
????????figsize=(15,6),
????????kind="bar",
????????sharey=True??#?開啟共享y軸
???????)
plt.show()

散點矩陣圖
#?單圖導(dǎo)入
from?pandas.plotting?import?scatter_matrix
scatter_matrix(df1,alpha=0.5,figsize=(14,6),diagonal="kde")
plt.show()

平行分類圖
為了繪制平行分類圖,我們導(dǎo)入著名的iris數(shù)據(jù)集:

其中:屬性Name就是我們進(jìn)行分類的數(shù)據(jù)字段
#?導(dǎo)圖模塊
from?pandas.plotting?import?parallel_coordinates
parallel_coordinates(
????iris,?#?數(shù)據(jù)
????class_column="Name",??#?分類名稱所用字段
????color=('#556270',?'#4ECDC4',?'#C7F464')?#?顏色設(shè)置
)
plt.show()

總結(jié)
我們總結(jié)下Pandas內(nèi)置繪圖的特點:
代碼量少,最大的優(yōu)點 快速簡潔,基本繪圖可以滿足 靜態(tài)化,非動態(tài)可視化 圖片質(zhì)量一般

相關(guān)閱讀:
