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

Matplotlib中嵌套subfigure为何无法在GridSpec中分离各自的suptitle?

Matplotlib中嵌套subfigure为何无法在GridSpec中分离各自的suptitle?

我原本以为下面这段代码能生成两行互不重叠的suptitle:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 6))

fig_gridspec = fig.add_gridspec(1, 1)

top_subfig = fig.add_subfigure(fig_gridspec[(0, 0)])

top_subfig.suptitle("I am the top subfig")

top_subfig_gridspec = top_subfig.add_gridspec(1, 1, top=.7)

nested_subfig = top_subfig.add_subfigure(top_subfig_gridspec[(0, 0)])

nested_subfig.suptitle("I am the nested subfig")

plt.show()

但实际运行后,两个标题却重叠在了一起👇

两个重叠的suptitle的图表

有没有大佬能解释下这是为啥?另外,有没有办法用嵌套子图实现标题的分离效果?


补充说明

编辑1:这里要明确下,我指的是不修改GridSpec的网格尺寸的前提下实现分离。

我知道下面这种方法是可行的,说不定最后也只能这么做:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 6))

fig_gridspec = fig.add_gridspec(1, 1)

top_subfig = fig.add_subfigure(fig_gridspec[(0, 0)])

top_subfig.suptitle("I am the top subfig")

top_subfig_gridspec = top_subfig.add_gridspec(2, 1, height_ratios=[.1, 1])

nested_subfig = top_subfig.add_subfigure(top_subfig_gridspec[(1, 0)])

nested_subfig.suptitle("I am the nested subfig")

plt.show()

但我就是搞不懂第一段代码为啥不行,而且为啥嵌套子图的位置好像没法在父级子图里调整?

编辑2:另外还有个相关的问题,我在更复杂的实际场景里发现,包含嵌套子图的GridSpec中设置hspace好像完全不起作用。我现在甚至开始怀疑:当GridSpec关联的是子图,或者里面放置的是子图时,GridSpec的参数根本就不生效?目前还没摸清楚这个问题的边界。

编辑3:最后补充一句,我一开始没说清楚,在我的实际业务场景里使用constrained_layout会引发一堆问题——虽然它能解决部分排版问题,但我没法用它来处理当前的情况。我现在就想搞明白:为啥子图就是不遵守它所在的GridSpec规则?如果答案是“这是Matplotlib的bug,你这种场景别用嵌套子图”,或者“这是Matplotlib的设计逻辑,你这种需求不该用嵌套子图”,我都能接受。


备注:内容来源于stack exchange,提问作者Katie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:52:59