Matplolib是最常用的Python數(shù)據(jù)繪圖工具庫,支持不同樣式數(shù)據(jù)的圖像繪制。本文介紹一些使用Matplotlib庫的注意事項,主要包括:
- subplots
- 布局調(diào)整
- specgram(光譜圖)
- pcolormesh
- 樣式增強

Matplolib
subplots
subplots()是繪圖的開始,創(chuàng)建不同子圖的排列結(jié)構(gòu)。
如下:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()
最終的圖像展示使用plt.show()方法。
返回:
- fig:繪圖的底版,用于顯示整個背景輪廓,等同于plt.gcf();
-
axes:子圖的集合,通過下標選中單個子圖,如
axes[0][0];
參數(shù):
- nrows和ncols:子圖排列的行和列;
非規(guī)則的排列,使用subplot2grid(),通過結(jié)構(gòu)shape和位置loc排列子圖,如,排列5個子圖,上三下二結(jié)構(gòu):
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)
布局調(diào)整
在排列子圖的過程中,可能出現(xiàn):
-
坐標軸遮擋:使用
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)
這樣,子圖就可以優(yōu)雅地排列在一起了。
specgram
連續(xù)信號推薦使用specgram()展示,即光譜圖(spectrogram)。
參數(shù):
- x:信號連續(xù)值列表;
- Fs:信號幀率;
即:
axes[0, 0].specgram(x=y, Fs=sr) # 光譜圖
axes[0, 0].set_title('std')
set_title()用于設置圖像的標題。
光譜圖
連續(xù)信號不推薦使用線圖展示,因為在信號中,一般含有幀率,即每秒信號數(shù),而使用線圖展示,就會忽略幀率信息,無法體現(xiàn)波形的相似性。
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')用于關(guān)閉子圖。
pcolormesh
二維特征不推薦使用散點圖,因為散點圖的展示區(qū)域較小,對比效果較差。
樣式增強
seaborn是Matplotlib的顏色和樣式擴展。
使用方式:在plt繪制之前,通過seaborn聲明其他的展示樣式。
import seaborn as sns
sns.set(style='ticks', palette='Set2')
歡迎Follow我的GitHub:https://github.com/SpikeKing
By C. L. Wang @ 美圖云事業(yè)部
OK, that's all!