Matplolib是最常用的Python数据绘图工具库,支持不同样式数据的图像绘制。本文介绍一些使用Matplotlib库的注意事项,主要包括:
- subplots
- 布局调整
- specgram(光谱图)
- pcolormesh
- 样式增强
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')
欢迎Follow我的GitHub:https://github.com/SpikeKing
By C. L. Wang @ 美图云事业部
OK, that's all!