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

Python中如何让不同Figure内的所有Subplot坐标轴长度一致?

如何确保多个Matplotlib Figure中的所有Subplot具有相同的X轴和Y轴物理长度

我正在测试不同的图表展示方式:

  • 第一种方式是创建一个包含12个子图的Figure,分为2列6行,代码如下:
fig, ax = plt.subplots(6, 2, figsize=(20,26))
  • 另一种方式是根据分类数据将12个子图拆分到3个不同的Figure中,代码示例如下:
figA, ax = plt.subplots(5, 1, figsize=(10,23))
figB, ax = plt.subplots(3, 1, figsize=(10,17))
fig2, ax = plt.subplots(4, 1, figsize=(10,20))

请问是否存在方法能确保所有Figure中的所有Subplot都具有相同的x轴和y轴长度?


当然可以,核心是统一单个子图的物理尺寸,并结合子图布局的间距设置来实现。具体步骤如下:

1. 确定单个子图的目标尺寸

先从你第一个Figure的布局反推(或直接定义)单个子图的宽高:

  • 第一个Figure是6行2列,figsize=(20,26),假设子图之间的默认间距(wspace/hspace)保持一致,那么单个子图的宽度约为 20 / 2 = 10,高度约为 26 / 6 ≈ 4.33。

2. 根据子图数量计算对应Figure的figsize

针对拆分后的三个Figure,按照单个子图的尺寸计算总figsize,确保每个子图的物理大小完全一致:

# 从第一个Figure拆分出单个子图的基准尺寸
subplot_width = 10
subplot_height = 26 / 6

# 调整后的拆分Figure代码
figA, axA = plt.subplots(5, 1, figsize=(subplot_width, subplot_height * 5))
figB, axB = plt.subplots(3, 1, figsize=(subplot_width, subplot_height * 3))
fig2, ax2 = plt.subplots(4, 1, figsize=(subplot_width, subplot_height * 4))

# 统一设置所有Figure的子图间距(和第一个Figure保持一致,避免间距影响显示)
for fig in [figA, figB, fig2]:
    plt.subplots_adjust(hspace=0.3)  # 替换为你实际需要的间距值

3. 更精确控制:使用GridSpec

如果需要消除间距对总尺寸的影响,用GridSpec可以更精细地定义每个子图的精确大小:

import matplotlib.gridspec as gridspec

# 定义单个子图的精确宽高
sub_w = 10
sub_h = 4.33

# 第一个Figure:6行2列
fig1 = plt.figure(figsize=(sub_w*2, sub_h*6))
gs1 = gridspec.GridSpec(6, 2, figure=fig1)
for i in range(6):
    for j in range(2):
        fig1.add_subplot(gs1[i,j])

# 拆分后的Figure A:5行1列
figA = plt.figure(figsize=(sub_w, sub_h*5))
gsA = gridspec.GridSpec(5, 1, figure=figA)
for i in range(5):
    figA.add_subplot(gsA[i,0])

额外补充:统一轴刻度范围(可选)

如果不仅要轴的物理长度一致,还要刻度范围相同,可以手动设置所有子图的轴范围:

# 设定统一的X、Y轴范围
x_range = (0, 10)
y_range = (0, 20)

# 遍历所有子图应用范围
for ax in axA.flat:
    ax.set_xlim(x_range)
    ax.set_ylim(y_range)
# 对其他Figure的子图执行同样操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:45:40