我正在尝试制作 3 对子图,每对之间有更多的空间。但我无法独立改变对之间的空间。
我正在使用嵌套的
GridSpec
,如下这个答案。
from matplotlib import pyplot as plt
from matplotlib import gridspec
layout = "constrained"
fig = plt.figure(figsize=(2, 6), layout=layout)
fig.suptitle(f"{layout=}")
gs = gridspec.GridSpec(3, 1, figure=fig, hspace=0.2)
for g in gs:
sub_gs = g.subgridspec(2, 1, hspace=0.1)
for gg in sub_gs:
ax = fig.add_subplot(gg)
ax.tick_params(labelbottom=False, labelleft=False, direction="in")
fig.savefig(f"test-{layout}.png")
plt.show()
当
layout = None
时,间距有意义(3 组,每组 2 个子图);当 layout = "constrained"
时,它不会...事实上,当 GridSpec
时,外部 hspace
的 layout = "constrained"
根本没有任何效果。相反,外部 GridSpec
的间距仅响应布局引擎的 h_pad
,这会影响所有子图(请参阅约束布局指南# 填充和间距)。
如何使用约束布局获得左侧的结果,以便例如子图填满了整个图形,可以轻松添加跨越所有 6 个子图的颜色条,等等?
我不知道是否可以通过嵌套
GridSpec
和受限布局来实现这种级别的控制。
我最终使用了插图。然后,可以使用
hspace
控制绘图对之间的空间,并且可以通过插图大小(下面的 space
变量)手动控制每对绘图内的空间。
from matplotlib import pyplot as plt
layout = "constrained"
fig, axs = plt.subplots(
3, 1, figsize=(2, 6), gridspec_kw=dict(hspace=0.2), layout=layout
)
fig.suptitle(f"{layout=}")
space = 0.1
height = (1 - space) / 2
for ax in axs:
ax.spines[:].set_visible(False)
ax.tick_params(bottom=False, left=False, labelbottom=False, labelleft=False)
inset1 = ax.inset_axes((0, height + space, 1, height))
inset2 = ax.inset_axes((0, 0, 1, height))
for inset in (inset1, inset2):
inset.tick_params(labelbottom=False, labelleft=False, direction="in")
fig.savefig(f"test-{layout}.png")