更新时间:2022-04-11 来源:黑马程序员 浏览量:
在带有标题的多个子图并排显示时,多个子图会因区域过于紧凑而出现标题和坐标轴之间相互重叠的问题,而且子图元素的摆放过于紧凑,也影响用户的正常查看。matplotlib中提供了一些调整子图布局的方法,包括约束布局、紧密布局和自定义布局,通过这些方法可以合理布局多个子图。下面将对子图的局部方法进行详细介绍。
约束布局是指通过一些列限制来确定画布中元素的位置的方式,它预先会确定一个元素的绝对定位,之后以该元素的位置为基点对其他元素进行绝对定位,从而灵活地调整元素的位置。
matplotlib在绘制多子图时默认并未启用约束布局,它提供了两种方式启用约束布局:第一种方式是使用subplots()或figure()函数的constrained_layout参数;第二种方式是修改figure.constrained_layout.use配置项。具体内容如下。
(1)使用constrained_layout参数
matplotlib使用subplots()或figure()函数创建子图或画布时,可以将constrained_layout参数的值设为True,进而调整子图元素的布局,示例代码如下:
plt.subplots(constrained_layout=True)
(2)修改figure.constrained_layout.use配置项
matplotlib可以通过rcParams字典或rc()函数修改figure.constrained_layout.use配置项的值为True,进而调整子图元素的布局,示例代码如下:
plt.rcParams['figure.constrained_layout.use'] = True
另外,matplotlib还可以修改以下配置项来调整子图之间的距离。
·figure.constrained_layout.w_pad/h_pad:表示绘图区域的内边距,默认为0.04167。
·figure.constrained_layout.wspace/hspace:表示子图之间的空隙。默认为0.02。
例如,使用subplots()函数绘制2行2列的带有坐标轴标签的子图,并通过subplots()函数的constrained_layout参数启动约束布局,解决子图之间标签重叠的问题,具体代码如下。
import matplotlib.pyplot as plt # 绘制子图并启用约束布局 fig, axs = plt.subplots(2, 2, constrained_layout=True) ax_one = axs[0, 0] ax_one.set_title('Title') ax_two = axs[0, 1] ax_two = axs[0, 1] ax_two.set_title('Title') ax_thr = axs[1, 0] ax_thr.set_title('Title') ax_fou = axs[1, 1] ax_fou.set_title('Title') plt.show()
调整后的效果如图5-15所示。
图5-15 约束布局调整前与调整后的效果