公衆號:尤而小屋
作者:Peter
編輯:Peter
大家好,我是Peter~
之前寫過很多關於Pandas的文章都是介紹如何使用Pandas來處理數據,這的確是它的強項。
其實,Pandas還有一個內置的功能:繪圖。你沒有看錯:Pandas自身就是可以繪圖的。本文詳細介紹基於Pandas的快速繪圖方法。
Pandas內置繪圖
參數
下面是常見的參數及解釋,詳細的請參考官網:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html
DataFrame.plot(x=None, y=None, # 指數據框列的標籤或位置參數
kind='line', # 圖的類型:line bar barh kde area scatter hist box等
ax=None, # 座標軸
subplots=False, # 是否繪製子圖
sharex=None, # 是否共享xy軸
sharey=False,
layout=None, # 佈局
figsize=None, # 大小
use_index=True, # 索引
title=None, # 圖形標題
grid=None, # 網格線
legend=True, # 圖例
style=None, # 風格
logx=False, # 對數化
logy=False,
loglog=False, # 開啓對數化
xticks=None, # 設置x、y軸刻度值,序列形式(比如列表)
yticks=None,
xlim=None, # 設置座標軸的範圍,列表或元組形式
ylim=None,
rot=None, # 設置軸標籤(軸刻度)的顯示旋轉度數
xerr=None, # 誤差
secondary_y=False, # 開啓第二y軸(右y軸)
sort_columns=False, # 以字母表順序繪製各列,默認使用前列順序
**kwds)
模擬數據
本文中主要使用的一份模擬數據:根據numpy庫模擬生成的
折線圖
繪製最基礎的圖形:折線圖
基礎折線圖
禁用圖例
就是上圖右上角的col1、col2、col3
# 禁用圖例Legend
df.plot(legend=False,kind="line")
plt.show
調整兩個軸的名稱
# 設置兩個軸的名稱
df.plot(kind="line",xlabel="x_new",ylabel="y_new")
plt.show
柱狀圖
基礎柱狀圖
# 寫法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()
多元素柱狀圖
堆疊柱狀圖
水平柱狀圖
當然,也可以是堆疊的形式:
散點圖
基礎散點圖
改變大小和顏色
df.plot(kind="scatter", # 指定類型
x="col1", y="col3", # 指定兩個軸
s=df["col2"] *500, # 點的大小
c="r" # 點的顏色
)
plt.show()
帶顏色棒的散點圖
餅圖
針對Series
爲了繪製餅圖,模擬了一份新數據:
series.plot(kind="pie",figsize=(6,6))
plt.show()
針對DataFrame
同樣的,再繪製一份數據:
箱型圖
基礎箱型圖
自定義箱型圖
# 自定義顏色
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, # 關鍵參數
sym="r+")
plt.show()
使用boxplot繪箱型圖
參數是同樣適用的:
蜂窩圖
爲了繪製不同的蜂窩圖,模擬了一份新數據:
基礎蜂窩圖
改進版蜂窩圖
df1.plot(
kind="hexbin",
x="A",
y="B",
C="C", # 顏色深度的表示
reduce_C_function=np.mean, # 指定不同聚合參數: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的密度圖
面積圖
多子圖
繪製子圖主要的參數:
- subplots: 默認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軸的參數:
df.plot(subplots=True,
layout=(1,3), # 1行3列
figsize=(15,6),
kind="bar",
sharey=True # 開啓共享y軸
)
plt.show()
散點矩陣圖
# 單圖導入
from pandas.plotting import scatter_matrix
scatter_matrix(df1,alpha=0.5,figsize=(14,6),diagonal="kde")
plt.show()
平行分類圖
爲了繪製平行分類圖,我們導入著名的iris數據集:
其中:屬性Name就是我們進行分類的數據字段
# 導圖模塊
from pandas.plotting import parallel_coordinates
parallel_coordinates(
iris, # 數據
class_column="Name", # 分類名稱所用字段
color=('#556270', '#4ECDC4', '#C7F464') # 顏色設置
)
plt.show()
總結
我們總結下Pandas內置繪圖的特點:
- 代碼量少,最大的優點
- 快速簡潔,基本繪圖可以滿足
- 靜態化,非動態可視化
- 圖片質量一般