Matplotlib。子图不同行之间的不同空间

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

我想在子图系统的行之间设置不同的水平空间值。我尝试使用函数

plt.subplots_adjust
,但它改变了具有相同公共值的所有行之间的空间。例如,我希望第 1、2 和第 3 行之间的间距等于
hspace=0.05
,同时第 3 行和第 4 行之间的间距必须为
hspace=0.5
。我怎么能那样做?

在 Stackoverflow 上查看这里,我只发现了两个帖子herehere,但它们对我没有帮助。

matplotlib space subplot spacing
1个回答
1
投票

为此创建两个单独的GridSpec更容易。也有一些不错的选择这里

正如您所提到的,您需要前 3 个子图具有 0.05 hspace,而下一个(第 3 和第 4 之间)具有 0.5 hspace。因此,第一个 Grdspec 的 hspace 为 0.05,而下一个 Grdspec 的 hspace 为 0.5。另外,我已经删除了第一组的 x 轴并拥有一个共享的 x 轴。这在下面的 4 个子图示例中显示...

import matplotlib.pyplot as plt

# Use two  gridspecs to have specific hspace
gs_top = plt.GridSpec(nrows=4, ncols=1, hspace=0.05) ## HSPACE for top 3
gs_base = plt.GridSpec(nrows=4, ncols=1, hspace=0.5) ##HSPACE for last one
fig = plt.figure()

# The first 3 shared axes
ax = fig.add_subplot(gs_top[0,:]) # Create the first one, then add others...
other_axes = [fig.add_subplot(gs_top[i,:], sharex=ax) for i in range(1, 3)]
bottom_axes = [ax] + other_axes

# Hide shared x-tick labels
for ax in bottom_axes[:-1]:
    plt.setp(ax.get_xticklabels(), visible=False)

# Plot data
for ax in bottom_axes:
    data = np.random.normal(0, 1, np.random.randint(10, 500)).cumsum()
    ax.plot(data)
    ax.margins(0.05)

#Finally plot the last one, with hspace of 0.5 - gs_base
finalax = fig.add_subplot(gs_base[-1,:])
finalax.plot(np.random.normal(0, 1, 1000).cumsum())

plt.show()

剧情

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