更新时间:2022-04-12 来源:黑马程序员 浏览量:
matplotlib中紧密布局与约束布局相似,它采用紧凑的形式将子图排列到画布中,仅适用于刻度标签、坐标轴标签和标题位置的调整。
pyplot中提供了两种实现紧密布局的方式:第一种方式是调用tight_layout()函数;第二种方式是修改figure.autolayoutrcParam配置项。关于紧密布局的两种实现方式的介绍如下。
(1)调用tight_layout()函数
matplotlib在1.1版本中引入了tight_layout()函数,通过该函数调整子图的内边距及子图的间隙,使子图能适应画布的绘图区域。tight_layout()函数的语法格式如下:
tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)
该函数的参数含义如下。
.pad:表示画布边缘与子图边缘之间的空白区域的大小,默认为1.08。
.h_pad, w_pad:表示相邻子图之间的空白区域的大小。
.rect:表示调整所有子图位置的矩形区域的四元组(left,bottom,right,top),默认为(0,0,1,1)。
需要注意的是,当pad参数设为0时,空白区域的文本会出现被裁剪的现象,之所以出现文本部分缺失的情况,可能是因为算法错误或受到算法的限制。因此,官方建议pad参数的取值应至少大于0.3。
(2)修改figure.autolayoutrcparam配置项
pyplot可以通过rcParams字典或rc()函数修改figure.autolayoutParam配置项的值为True,使子图元素适应画布,示例代码如下:
plt.rcParams['figure.autolayoutrcParam'] = True
例如,使用subplots()函数绘制2行2列的带有坐标轴标签的子图,并通过tight_layout()函数解决子图之间的标签重叠问题,代码如下。
import matplotlib.pyplot as plt fig, axs = plt.subplots(2, 2) ax_one = axs[0, 0] ax_one.set_title('Title') ax_two = axs[0, 1] ax_two.set_title('Title') ax_thr = axs[1, 0] ax_thr.set_title('Title') # 调整子图之间的距离 plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=2) plt.show()
紧密布局调整前与调整后的效果如图5-16所示。
图5-16 紧密布局调整前与调整后的效果