matplotlib畫圖(二)——子圖
阿新 • • 發佈:2018-11-30
在matplotlib有一個方法是subplot
,可以實現在一張畫布中,存在多個子圖的情況。在同類資料比較分析的時候,這類圖表很受大家歡迎。
matplotlib.pyplot.subplot(*args, **kwargs)
使用方法:
subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(ax)
nrows表示行數,ncols表示列數,index表示第幾個(從上往下,從左往右數,最小值為1);這三個引數組合起來表示畫一幅nrows*ncols個子圖的圖。pos其實就是nrows、ncols、index的結合體,比如subplot(2,1,1)
subplot(211)
表述的是同一個意思。所不同的是,pos中三個數字的任意一個都不能大於10,但使用nrows, ncols, index就無此限制了。以上一文的例子為例:
import matplotlib.pyplot as plt # 第一組資料 x1 = list(range(5)) y1 = list(map(lambda x: x**2, x1)) # 第二組資料 x2 = list(range(4, 10)) y2 = list(map(lambda x: x**2/2, x2)) # 作一幅2*1的圖,選擇第1個子圖 ax1 = plt.subplot(211) ax1.plot(x1, y1) # 作一幅2*1的圖,選擇第2個字圖 ax2 = plt.subplot(212) ax2.plot(x2, y2) # 刪除子圖ax2 # plt.delaxes(ax2) # 增加子圖ax2 # plt.subplot(ax2) # 顯示圖 plt.show()
當某些條件下,不需要展示圖2時,可以使用delaxes
實現:
# 刪除子圖ax2
plt.delaxes(ax2)
刪除後,又需要展示圖2時,可以使用subplot(ax)
實現:
# 增加子圖ax2
plt.subplot(ax2)
調整上述程式碼:
#將第二幅圖的子圖排布做了調整
# ax2 = plt.subplot(212)
ax2 = plt.subplot(322)
子圖調整後,會以新的子圖佈局為準,由於找不到ax1標準的畫布佈局,此圖將不會展示,結果呈現為:
子圖的樣式調整引數如下:
屬性 | 描述 |
---|---|
aspect | 預設值為"auto",也可以為大於0的數(當數字大於0小於0.1時,數字越小,y軸被壓縮顯示的越嚴重;當數字大於0.1,數字越大,x軸被壓縮的越厲害) |
anchor | 預設值為“C”即居中的意思,是子圖位置的配置項,其他值還有:“SW”,“S”,"SE"等;當各個圖aspect都為“auto"的情況下,看不出來; |
autoscale_on | bool值,自動定位x、y座標,0為關閉,1為開啟;預設開啟 |
autoscalex_on | bool值,自動定位x座標,0為關閉,1為開啟;預設開啟 |
autoscaley_on | bool值,自動定位y座標,0為關閉,1為開啟;預設開啟 |
facecolor | 顏色,子圖的顏色,可以用顏色的全稱,比如:yellow,blue 也可以用簡寫,y,b 分別代表黃顏色與藍顏色 |
fc | 同facecolor,是其簡稱 |
frame_on | bool值,邊框是否展示,預設為展示 |
visible | bool值,子圖是否可見,預設為可見 |
xlabel | 字串,x軸命名 |
ylabel | 字串,y軸命名 |
xticklabels | 列表(List[str]),設定x軸每一個座標的名稱 |
yticklabels | 列表(List[str]),設定y軸每一個座標的名稱 |
xticks | 列表(List),x軸設定柱;簡單來說就是給出座標,會在該座標點顯示該點位置 |
yticks | 列表(List),y軸設定柱;簡單來說就是給出座標,會在該座標點顯示該點位置 |
效果圖(修改程式碼中的引數):
ax1 = plt.subplot(211, aspect=0.5)
ax1 = plt.subplot(211, aspect=0.5, anchor="W")
ax1 = plt.subplot(211, facecolor="yellow")
ax1 = plt.subplot(211, frame_on=0)
ax1 = plt.subplot(211, xlabel="x-name", ylabel="y_name")
ax1 = plt.subplot(211, xticklabels=["No.0","No.1","No.2","No.3","No.4"],
yticklabels=["No.0","No.1","No.2","No.3","No.4"])
ax1 = plt.subplot(211, xticks=[0.01, 1.0, 2.3, 3.5],
yticks=[0.01, 2.0, 5.3, 13.5])
更多引數見官網給出的文件:
本文參考文件:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.html#matplotlib.pyplot.subplot