1.方法一:
使用plt.subplots()统一添加多个子图
import matplotlib.pyplot as plt
# 设置一个2*2、尺寸为6x6,清晰度为100,背景颜色为白色,共享x与y轴的子图
# fig是一个图形对象,代表整个图形窗口,在该窗口中可以放多个绘图区域。
# axes是一个二维numpy数组,包含N个子图对象,可以在它们各自的区域内进行绘图
fig,axes = plt.subplots(nrows=2,ncols=2,figsize=(6,6),dpi=100,facecolor='w',sharex=True,sharey=True)
# 为子图添加数据标签
# zip()函数将两个列表对象中元素对应打包一个个元组
for a,b in zip(['a','b','c','d'],[1,2,3,4]):
axes[0,0].text(a,b,b)
for a,b in zip(['a','b','c','d'],[5,2,3,4]):
axes[0,1].text(a,b,b)
# 为每个子图绘图
axes[0,0].plot(['a','b','c','d'],[1,2,3,4])
axes[0,1].plot(['a','b','c','d'],[5,2,3,4])
# 为每个子图添加局部标题
axes[0,0].set_title('I Am Title')
axes[0,1].set_title('I Am Title')
# 添加全局标题
fig.suptitle('My Multi subplot Figure')
plt.show()
2.方法二:
使fig.add_subplot()指定位置添加子图
fig = plt.figure(figsize=(6,6),dpi=100,facecolor='w')
# add_subplot()是figure的一个方法,可以向已存在的figure里添加
ax1 = fig.add_subplot(2,2,1) # 二维矩阵的第一个位置
ax1.plot(['a','b','c','d'],[1,2,3,4])
ax1.set_title('title')
ax2 = fig.add_subplot(2,2,4)
ax2.plot(['a','b','c','d'],[1,2,3,4]) # 二维矩阵的第四个位置
ax2.set_title('title')
plt.show()
3.方法三:
使用plt.subplot()指定位置添加子图
fig = plt.figure(figsize=(6,6),dpi=100,facecolor='w')
# plt.subplot()是matplotlib的内置函数,可以在当前figure上创建子图
plt.subplot(221)
plt.plot(['a','b','c','d'],[1,2,3,4])
plt.title('title A')
plt.subplot(223)
plt.plot(['a','b','c','d'],[1,2,3,4])
plt.title('title C')
plt.show()
plt.subplot()合适快速创建子图。
4.多子图的微调
如下图,子图之间间距太小了,我们可以使用subplots_adjust()来调整间距。
fig = plt.figure(figsize=(6,6),dpi=100,facecolor='w')
plt.subplot(221)
plt.plot(['a','b','c','d'],[1,2,3,4])
plt.title('title A')
plt.subplot(222)
plt.plot(['a','b','c','d'],[1,3,8,6])
plt.title('title B')
plt.subplot(223)
plt.plot(['a','b','c','d'],[1,2,3,4])
plt.title('title C')
plt.subplot(224)
plt.plot(['a','b','c','d'],[6,5,1,4])
plt.title('title D')
# 前四个参数是子图距父窗口边缘的距离,wspace和hspace分别为子图之间的水平和垂直间距
fig.subplots_adjust(left=0.1,right=0.9,top=0.8,bottom=0.1,wspace=0.3,hspace=0.5)
fig.suptitle('Big Title',fontsize=20)
plt.show()
5.小结
plt.subplots()和fig.add_subplot()合适需要更精细控制的情况(因为获取到子图对象),而plt.subplot()合适快速创建子图。
使用fig.subplots_adjust()调节间距,设置参数时需要注意left/bottom不可大于或等于right/top。