如何使用嵌套网格规格和约束布局来改变子图间距?

问题描述 投票:0回答:1

我正在尝试制作 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
,这会影响所有子图(请参阅约束布局指南# 填充和间距)。

enter image description hereenter image description here

如何使用约束布局获得左侧的结果,以便例如子图填满了整个图形,可以轻松添加跨越所有 6 个子图的颜色条,等等?

matplotlib matplotlib-gridspec
1个回答
0
投票

我不知道是否可以通过嵌套

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")

enter image description hereenter image description here

© www.soinside.com 2019 - 2024. All rights reserved.