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

如何在Matplotlib pyplot中绘制比例各异的等高垂直子图

解决方案

要实现三个垂直排列、高度一致的子图(第一个宽高比1:1,后两个宽高比2:1),可以通过嵌套GridSpec结合set_aspect精确控制子图尺寸和位置,避免全局间距调整的问题。具体实现如下:

代码示例

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

# 替换为你的实际数据
x1 = y1 = range(10)
x2 = y2 = range(10)
x3 = y3 = range(10)

# 定义子图高度,画布尺寸匹配后两个子图的宽高比(2:1)
subplot_height = 2
fig = plt.figure(figsize=(2 * subplot_height, 3 * subplot_height))

# 创建3行1列的外层网格,保证三个子图高度一致
gs_outer = gridspec.GridSpec(3, 1, hspace=0.3)

# 第一个子图:用3列内层网格,仅使用中间列实现左右留白,强制1:1宽高比
gs_inner = gridspec.GridSpecFromSubplotSpec(1, 3, subplot_spec=gs_outer[0], width_ratios=[1, 1, 1])
ax1 = fig.add_subplot(gs_inner[1])
ax1.set_aspect('equal')
ax1.plot(x1, y1, "-", color="k")

# 第二个子图:占满整行,设置宽高比2:1(aspect=高度/宽度=0.5 → 宽度/高度=2)
ax2 = fig.add_subplot(gs_outer[1])
ax2.set_aspect(0.5)
ax2.plot(x2, y2, "-")

# 第三个子图:与第二个子图配置完全一致
ax3 = fig.add_subplot(gs_outer[2])
ax3.set_aspect(0.5)
ax3.plot(x3, y3, "--")

plt.tight_layout()
plt.show()

关键说明

  • 外层GridSpec(3,1)确保三个子图高度完全一致,hspace参数控制垂直间距。
  • 第一个子图通过嵌套3列的内层网格,仅使用中间列形成左右留白,再通过set_aspect('equal')强制1:1宽高比。
  • 后两个子图直接使用外层网格的整行,通过set_aspect(0.5)实现2:1的宽高比(aspect为高度与宽度的比值,0.5对应宽度是高度的2倍)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:47:33