如何使用约束布局将图形干净地拟合到图形中。
constrained_layout会自动调整子图和装饰,例如图例和颜色条,以使其适合图形窗口,同时尽最大可能保留用户请求的逻辑布局。
constrained_layout与tight_layout相似 ,但是使用约束求解器来确定允许它们拟合的轴的大小。
在将任何轴添加到图形之前,必须先激活constrained_layout。这样做的两种方法是
-
使用
subplots()
或 各自的参数figure()
,例如:
plt.subplots(constrained_layout=True)
- 通过rcParams激活它,例如:
plt.rcParams['figure.constrained_layout.use'] = True
当您有多个子图时,通常会看到不同轴的标签相互重叠。
彩条
如果使用colorbar()
命令创建颜色条,则需要为其腾出空间。constrained_layout
自动执行此操作。
请注意,如果您指定use_gridspec=True
它,它将被忽略,因为通过进行了此选项是为了改善布局 tight_layout
如果您为的ax
参数colorbar
指定轴列表(或其他可迭代的容器) ,则constrained_layout将占用指定轴的空间。
如果从轴网格内部指定轴列表,则颜色栏将适当地窃取空间并留出间隙,但所有子图的大小均相同。
字幕
constrained_layout
还可以腾出空间suptitle
。
图例
图例可以放置在其父轴的外部。约束布局旨在处理Axes.legend()
。但是,约束布局无法处理通过Figure.legend()
(尚未)创建的图例 。
但是,这将从子图布局中窃取空间:
constrained_layout=True 明显看出子图缩小
为了使图例或其他艺术家不会从子图布局中窃取空间,我们可以leg.set_in_layout(False)
。
当然,这可能意味着图例将被裁剪,但是如果随后使用调用该图,则可能很有用。
但是请注意,图例的状态必须再次切换才能使已保存的文件起作用,并且如果我们要constrained_layout在打印之前调整轴的大小,
则必须手动触发绘制。fig.savefig('outname.png', bbox_inches='tight')
get_in_layout
边距和间距¶
对于constrained_layout,我们在每个轴的边缘周围实现了填充。此填充设置距图边缘的距离以及相邻图之间的最小距离。
它由关键字参数w_pad
和h_pad
函数 以英寸为单位指定set_constrained_layout_pads
:
rcParams
可以在脚本或文件中设置五个rcParammatplotlibrc
。它们都有前缀figure.constrained_layout
:
-
use
:是否使用constrained_layout。默认为False -
w_pad
,h_pad
:围绕轴对象填充。 - 浮点数代表英寸。默认值为3./72。英寸(3分)
-
-
wspace
,hspace
:子图组之间的空间。 - 浮点数表示要分离的子图宽度的一部分。默认值为0.02。
-
-
手动设置轴位置
手动设置轴位置可能有充分的理由。手动调用set_position
将设置轴,因此constrained_layout对其不再起作用。(请注意,constrained_layout仍留有空间用于移动的轴)。