多张子图重叠与不重叠的绘制效果如下图所示:
方案一:受约束的布局 constrained_layout
-
通过
figure
参数设置:plt.figure(constrained_layout=True)
-
通过
subplots
参数设置:plt.subplots(layout="constrained")
-
通过
rcParams
设置:plt.rcParams['figure.constrained_layout.use'] = True
以上方式选择其中一种即可。
方案二: plt.tight_layout()
matplotlib.pyplot.tight_layout(*, pad=1.08, h_pad=None, w_pad=None, rect=None)
方法说明:调整子图与图形边缘的间距,调整子图之间的间距。
参数说明:
pad
:调整子图与图形边缘的间距。w_pad
h_pad
:调整子图之间的水平、垂直间距。如果只设置了pad
而没有设置w_pad
和h_pad
,那么tight_layout
会使用pad
参数的值作为子图之间默认的水平和垂直间距。如果h_pad
和w_pad
也被设置,则这两个参数的值将覆盖pad
参数对应的间距设置。rect
:调整子图区域,tight_layout
将会使子图置于rect
的区域中,换句话说,tight_layout
将只会调整指定矩形内的子图布局,而不是整个图形窗口的布局。因此,使用rect
参数可以在调用tight_layout
时排除掉图形中不希望调整的区域,比如图例或者标题等。如下方右图,我们在顶部预留了25%
的空间用于放置标题,以防止标题与子图重叠:
补充: plt.suptitle('Default tight_layout', fontsize=16)
用于对整幅图像设置标题。
注意:如果使用了 plt.tight_layout()
,受约束的布局 constrained layout
将不生效
示例:
plt.tight_layout()
相关代码:
import matplotlib.pyplot as plt
plt.figure()
plt.subplot(211)
plt.plot(range(12))
plt.subplot(212)
plt.plot(range(100))
# 设置rect参数,留出顶部25%的空间
plt.tight_layout(rect=[0, 0, 1, 0.75])
plt.suptitle('Custom tight_layout with rect', fontsize=16)
plt.show()
参考资料:matplotlib.pyplot.tight_layout
方案三: plt.subplots_adjust()
matplotlib.pyplot.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)[source]
参数说明:
wspace
调整子图之间的水平间距hspace
调整子图之间的垂直间距
示例:
plt.subplots_adjust(wspace=0, hspace=0) # 调整子图间距