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

如何在subplot2grid的特定子图组间添加空白行或间距?

解决Matplotlib子图组间添加空白间距的问题

Got it, let's fix this spacing issue without creating extra unwanted empty subplots! The problem with expanding the grid to (5,8) is that while you leave row 2 empty, matplotlib still considers that part of the grid structure—but we don't actually need to create subplots there. Here are two clean solutions:

方法1:使用GridSpec精确控制行高度(推荐)

GridSpec lets you define custom row heights, so you can set a tiny "blank" row between your upper and lower subplot groups without generating unused subplots. Here's how to implement it:

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

# 定义5行8列的网格,设置行高度比例:前2行正常,中间1行设为极小高度(作为空白),后2行正常
gs = gridspec.GridSpec(5, 8, height_ratios=[1, 1, 0.1, 1, 1])

# 上方子图组
ax1 = plt.subplot(gs[0:2, 0:4])  # 占行0-1,列0-3
ax2 = plt.subplot(gs[0, 4:6])    # 占行0,列4-5
ax3 = plt.subplot(gs[0, 6:8])    # 占行0,列6-7
ax4 = plt.subplot(gs[1, 4:6])    # 占行1,列4-5
ax9 = plt.subplot(gs[1, 6:8])    # 占行1,列6-7

# 下方子图组
ax5 = plt.subplot(gs[3:5, 0:4])  # 占行3-4,列0-3
ax6 = plt.subplot(gs[3, 4:6])    # 占行3,列4-5
ax7 = plt.subplot(gs[3, 6:8])    # 占行3,列6-7
ax8 = plt.subplot(gs[4, 4:6])    # 占行4,列4-5
ax10 = plt.subplot(gs[4, 6:8])   # 占行4,列6-7

# 自动调整子图布局,避免重叠
plt.tight_layout()
plt.show()

为什么这个方法有效?

  • 我们明确将中间行的高度设为极小值(示例中是0.1,你可以根据需求调整这个数值来控制空白区域的宽窄)。
  • 只在需要的行(0-1和3-4)创建子图,不会产生多余的空图干扰布局。

方法2:调整现有布局的间距(无需修改网格)

如果你想继续使用subplot2grid和原始的(4,8)网格,也可以通过subplots_adjust或手动调整位置来添加两组子图之间的间距:

选项A:全局调整垂直间距

这种方法会增加所有子图之间的垂直间距,是快速解决问题的方案:

# 你的原始(4,8) subplot2grid代码...
ax1 = plt.subplot2grid((4, 8), (0, 0), colspan=4, rowspan=2)
# ...其余9个子图的代码...

# 增加垂直间距(数值越大,间距越宽)
plt.subplots_adjust(hspace=0.8)
plt.show()

选项B:手动调整下方子图的位置

如果只想精确控制两组子图之间的间隙,可以手动调整下方子图的位置:

# 你的原始(4,8) subplot2grid代码...
ax5 = plt.subplot2grid((4, 8), (2, 0), colspan=4, rowspan=2)
# ...其余下方子图的代码...

# 获取ax5当前的位置,将顶部位置向下移动
pos = ax5.get_position()
ax5.set_position([pos.x0, pos.y0 - 0.1, pos.width, pos.height])
# 对ax6-ax10执行类似的位置调整,保持整体对齐
plt.show()

关于你原来的尝试

当你把网格扩展到(5,8)时,你看到的“空子图”其实并没有被创建——matplotlib只是预留了网格空间。理论上你可以忽略它们,但使用GridSpec是更清晰、更可控的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:25:10