一、导读
上节总结了Matplotlib的均匀绘图的语法:subplot、add_subplot、subplots、subplot_mosaic。其中前两个函数也可以进行非均匀绘图。
但是在实际的科研工作和图表中,更多的是非均匀绘图。如下图所示:
1)学习非均匀子区的绘制方法。
2)补充axes常用的美化属性和方法。
二、非均匀子图划分
1)subplot函数
语法:plt.subplot(nrows, ncols, index, **kwargs)
nrows:绘图的行数
ncols:绘图的列数
index:绘图的索引,从上到下,从左至右,索引从1开始。
示例:创建一个画布,有三个子区,子区1、2在第一行,子区3单独在第二行。
import matplotlib.pyplot as plt
fig = plt.figure() #设置画布大小为6英寸*6英寸
ax1 = plt.subplot(221) #表示将画布分为2行2列,索引为1的子区
ax2 = plt.subplot(222) #表示将画布分为2行2列,索引为2的子区
ax3 = plt.subplot(212) #表示将画布分为2行1列,索引为2的子区
plt.show()
语法解释:
ax1 = plt.subplot(221)将fig分为四个区域,2行*2列,4个子图。1表示选中的索引为1的子区,也就是选中了左上角的子图。
ax2 = plt.subplot(222)同上一句,2表示选中索引为2的子区,也就是选中右上角的子图。
前两句语法可以看出,现在画布的上半部分全部已经被占满,还剩下下半部分。
ax3 = plt.subplot(212)表示将fig分为2个区域,2行1列,也就是上半部分和下半部分。2表示选中索引为2的子图,也就是下半部分。
因为第1句和第2句已经将上半部分占满,第3句将下半部分占满,组合起来就把整个画布占满了。
2)add_subplot函数
语法:fig.add_subplot(nrows, ncols, index, **kwargs)
参数解释和subplot类似。
示例:创建一个画布,有三个子区,子区1,2在第一行,子区3单独在第二行。
fig = plt.figure(figsize = (5, 5))
ax1 = fig.add_subplot(221) #表示将画布分为2行2列,索引为1的子区
ax2 = fig.add_subplot(222) #表示将画布分为2行2列,索引为2的子区
ax3 = fig.add_subplot(212) #表示将画布分为2行1列,索引为2的子区
plt.show()
3)subplot_mosaic函数
语法:fig, axs = plt.subplot_mosaic(子图别称,layout, figsize) #笔者常用这两个参数。
参数解释参见上一节内容。示例:创建一个画布,有三个子区,子区1,2在第一行,子区3单独在第二行。
fig, ax = plt.subplot_mosaic('''AB
CC''')
ax['A'].set_title('Part A') #设置A子区标题
ax['B'].set_title('Part B')
ax['C'].set_title('Part C')
plt.show()
三、axes对象常用的属性
axes.set_xlim():设置x轴范围,axes.set_xlim(-5, 5)表示设置x轴范围为-5——5
axes.set_xlabel():设置x轴标签,axes.set_xlabel('x轴', font1)表示设置x轴标签,并使用font1号新建字体样式
axes.set_xticks():设置x轴刻度,axes.set_xticks(range(-5, 6, 1)表示设置x轴刻度为[-5, -4, ..., 4, 5]
[label.set_fontsize(size) for label in axes.get_xticklabels]:改变x轴刻度字体大小
axes.legend(fontsize = 15):显示图例,并设置字体大小为15。
axes.set_title():设置标题。
总结
本文总结了Matplotlib中非均匀绘图的方式,主要通过 subplot、add_subplot、subplot_mosaic函数。每一个子区都是axes对象,我们可以调用axes绘图语句对某一个子区绘图。
介绍了axes对象中常用的几个属性:设置轴范围、设置轴标签、设置轴刻度、改变刻度字体大小、图例和标题。这几个参数是axes的美化参数,可以让我们的绘图更漂亮。
由于篇幅限制,本篇到此结束,下一节将正式介绍Matplotlib绘图语法。此内容将在"python数据分析实践"公众号同步更新。如果您有更好的想法或对文章有其他建议,可以关注或评论留言。如果有想要了解其它的内容,也可以联系或评论,感谢您的阅读!