You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不启用constrained_layout=True的情况下调整Gridspec子图的hspace?

问题描述

希望在不使用constrained_layout=True的前提下调整图中hspace的大小,当前代码如下:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np

fig = plt.figure()
# fig = plt.figure(constrained_layout=True)
GridSpec = gridspec.GridSpec(ncols=1, nrows=2, figure= fig, hspace=0.9)

subfigure_1= fig.add_subfigure(GridSpec[0,:])
subplots_1= subfigure_1.subplots(1,1)

subfigure_2= fig.add_subfigure(GridSpec[1,:])
subplots_2= subfigure_2.subplots(1,1)

plt.show()

启用constrained_layout=True时hspace虽能生效,但会引发其他问题,且该参数会禁用GridSpec的width_ratios属性。

解决方案

问题核心是Subfigure自带布局管理,会覆盖GridSpec的hspace设置,以下两种方法可解决:

方法1:直接使用add_subplot替代add_subfigure

放弃子figure结构,直接通过GridSpec添加子图,此时hspace设置会直接生效:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np

fig = plt.figure()
GridSpec = gridspec.GridSpec(ncols=1, nrows=2, figure=fig, hspace=0.9)

subplots_1 = fig.add_subplot(GridSpec[0, :])
subplots_2 = fig.add_subplot(GridSpec[1, :])

plt.show()

方法2:保留Subfigure并关闭其自动布局

如果必须使用Subfigure,可以关闭每个子figure的自动布局功能,让GridSpec的hspace控制间距:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np

fig = plt.figure()
GridSpec = gridspec.GridSpec(ncols=1, nrows=2, figure=fig, hspace=0.9)

subfigure_1 = fig.add_subfigure(GridSpec[0, :])
subfigure_1.tight_layout(False)  # 关闭子figure的自动布局
subplots_1 = subfigure_1.subplots(1, 1)

subfigure_2 = fig.add_subfigure(GridSpec[1, :])
subfigure_2.tight_layout(False)
subplots_2 = subfigure_2.subplots(1, 1)

plt.show()

两种方法都无需开启constrained_layout,同时能保留GridSpec的width_ratios等属性,实现垂直间距的调整。

内容的提问来源于stack exchange,提问作者Mo0nKizz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:57:13