如果你还不会用matplotlib画多子图,看这篇小短文就对了。看完后,你会明白多子图是怎么来的,然后收好文中两个模板(套路),它们能解决你大部分的需求。在你用matplotlib作图是思路清晰,信手拈来。
看上图,像这种一行的子图属于比较简单的类型(一列也是),我们用最常用的模板:
import matplotlib.pyplot as plt
# 第一步:创建一个figure,figsize参数设置figure的长和宽
fig = plt.figure(figsize=(22,5))
# 第二步,快速创建单行或单列布局的多子图(多行多列不支持)。sharey表示共用Y轴
ax1, ax2, ax3 = fig.subplots(1,3,sharey=True)
# 第三步,逐个创建子图,一个 ax 就是一个子图
# ax1作图,并设置X,Y轴名称,以及设置图上方的标题
ax1.bar(x,y,color='red')
ax1.set_xlabel('ABCDE')
ax1.set_ylabel('grade')
ax1.set_title('bar')
# ax2作图,并设置X轴名称,以及设置图上方的标题
ax2.stem(x,y)
ax2.set_xlabel('ABCDE')
ax2.set_title('stem')
# ax3作图,并设置X轴名称,以及设置图上方的标题
ax3.stackplot(x,y,color='green')
ax3.set_xlabel('ABCDE')
ax3.set_title('stack')
# 第四步,设置fig的标题,比ax1,ax2,ax3的标题更高一级
fig.suptitle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
# 第五步,展示图
plt.show()
思路:fig=plt.figure() → fig.subplots()
上图的布局不再是单调的N×N布局,而是支持一定的自定义布局。相比最常用模板,我们需要用到“add_gridspec()”。
import matplotlib.pyplot as plt
# 第一步,创建一个figure,layout参数可以调整子图的布局
fig = plt.figure(figsize=(15,6),layout='tight')
# 第二步,创建放置子图的网格,此处是2行3列
gs = fig.add_gridspec(2,3)
# 第三步,通过“.add_subplot()”逐个创建子图
# 选择网格并新增子图,gs[0,0]表示第1行,第1列的网格
ax1=fig.add_subplot(gs[0,0])
ax1.bar(x,y,color='red')
ax1.set_xlabel('ABCDE')
ax1.set_ylabel('grade')
ax1.set_title('bar_red')
# 选择网格并新增子图
ax2=fig.add_subplot(gs[1,0])
ax2.stem(x,y)
ax2.set_xlabel('ABCDE')
ax2.set_ylabel('grade')
ax2.set_title('stem_1')
# 选择第2列所用行的网格
ax3=fig.add_subplot(gs[:,1])
ax3.stackplot(x,y,color='green')
ax3.set_xlabel('ABCDE')
ax3.set_ylabel('grade')
ax3.set_title('stack')
# 选择网格并新增子图
ax4=fig.add_subplot(gs[0,2])
ax4.bar(x,y)
ax4.set_xlabel('ABCDE')
ax4.set_ylabel('grade')
ax4.set_title('bar_blue')
# 选择网格并新增子图
ax5=fig.add_subplot(gs[1,2])
ax5.stem(x,y)
ax5.set_xlabel('ABCDE')
ax5.set_ylabel('grade')
ax5.set_title('stem_1')
# 第四步,设置fig的标题,比ax1,ax2,ax3的标题更高一级
fig.suptitle('AAAAAAAAAAAAAAAAAAAAAAAAA')
# 第五步,展示图
plt.show()
思路:fig=plt.figure() → fig.add_gridspec() → fig.add_subplot()
对于复杂布局的多子图,我们用最通用模板。在两个模板中,并不是所有代码都是必须的,你可以不设置子图标题,不设置X,Y轴名称,也可以不设置figure的标题。
如果看完后对你有帮助,点赞 + 关注!还有更多“短小精悍”的文章。