Matplolib是最常用的Python資料繪圖工具庫,支援不同樣式資料的影像繪製。本文介紹一些使用Matplotlib庫的注意事項,主要包括:
- subplots
- 佈局調整
- specgram(光譜圖)
- pcolormesh
- 樣式增強
其他:
- 顏色集
- 直方圖Hist
subplots
subplots()是繪圖的開始,建立不同子圖的排列結構。
如下:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()
複製程式碼
最終的影像展示使用plt.show()方法。
返回:
- fig:繪圖的底版,用於顯示整個背景輪廓,等同於plt.gcf();
- axes:子圖的集合,通過下標選中單個子圖,如
axes[0][0]
;
引數:
- nrows和ncols:子圖排列的行和列;
非規則的排列,使用subplot2grid(),通過結構shape
和位置loc
排列子圖,如,排列5個子圖,上三下二結構:
ax1 = plt.subplot2grid(shape=(2, 6), loc=(0, 0), colspan=2)
ax2 = plt.subplot2grid((2, 6), (0, 2), colspan=2)
ax3 = plt.subplot2grid((2, 6), (0, 4), colspan=2)
ax4 = plt.subplot2grid((2, 6), (1, 1), colspan=2)
ax5 = plt.subplot2grid((2, 6), (1, 3), colspan=2)
複製程式碼
佈局調整
在排列子圖的過程中,可能出現:
- 座標軸遮擋:使用
tight_layout()
設定間距,其中pad
表示整體輪廓間距,w_pad
表示子圖水平間距,h_pad
表示子圖豎直間距; - 影像密集:使用
set_size_inches()
設定影像長寬的具體尺寸(英寸);
即:
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
fig = plt.gcf()
fig.set_size_inches(10, 8)
複製程式碼
這樣,子圖就可以優雅地排列在一起了。
specgram
連續訊號推薦使用specgram()展示,即光譜圖(spectrogram)。
引數:
- x:訊號連續值列表;
- Fs:訊號幀率;
即:
axes[0, 0].specgram(x=y, Fs=sr) # 光譜圖
axes[0, 0].set_title('std')
複製程式碼
set_title()
用於設定影像的標題。
連續訊號不推薦使用線圖展示,因為在訊號中,一般含有幀率,即每秒訊號數,而使用線圖展示,就會忽略幀率資訊,無法體現波形的相似性。
pcolormesh
二維特徵推薦使用pcolormesh()展示。除此之外,相似的展示形式:
- contourf:等高線,與pcolormesh類似,邊界較為模糊;
- imshow:影像模式,支援模糊處理,自適應寬高需要設定aspect的“auto”屬性;
即
axes[0, 0].pcolormesh(df1)
axes[0, 1].contourf(df2)
axes[1, 0].imshow(df2, interpolation='bicubic', aspect='auto')
axes[1, 1].axis('off')
複製程式碼
axis('off')
用於關閉子圖。
二維特徵不推薦使用散點圖,因為散點圖的展示區域較小,對比效果較差。
樣式增強
seaborn是Matplotlib的顏色和樣式擴充套件。
使用方式:在plt繪製之前,通過seaborn宣告其他的展示樣式。
import seaborn as sns
sns.set(style='ticks', palette='Set2')
複製程式碼
顏色集
Matplotlibcolors,參考
直方圖
標準直方圖的繪製,輸入資料hist_data
是列表資料。
def plot_hist(hist_data):
"""
繪製直方圖
:param hist_data: 直方圖資料
:return: 展示圖
"""
hist_data = np.asarray(hist_data)
sns.set(style='ticks', palette='Set2')
fig, aux = plot.subplots(ncols=1, nrows=1)
aux.hist(hist_data, bins=50, facecolor='magenta', alpha=0.75)
plot.show()
複製程式碼
對於座標軸X(或Y):
set_xlabel
設定標籤;set_xlim
設定座標值的範圍set_xticks
設定座標值的粒度;
注意:座標值的範圍(lim)與粒度(ticks)儘量統一。
aux.set_xlabel("sec")
aux.set_ylabel("num")
min_x, max_x = 8, 22
aux.set_xlim([min_x, max_x])
aux.set_xticks(range(min_x, max_x, 1))
複製程式碼
歡迎Follow我的GitHub:https://github.com/SpikeKing
By C. L. Wang @ 美圖雲事業部
OK, that's all!