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

如何在Matplotlib中用非GridSpec方式实现2×2网格下轴占满整行

解决Matplotlib子图跨行占位问题(无需GridSpec)

问题核心

你需要在2行2列的绘图网格中,让第二行的单个坐标轴占据整行,且不想使用GridSpec,同时疑惑plt.subplot(212)为何能在这种场景下生效。

原理拆解

plt.subplot()的参数遵循nrows ncols index的规则,三个数字可连写:

  • 223:对应2行2列的网格,选取第3个位置(按行从左到右计数:第一行左为1、右为2;第二行左为3、右为4)
  • 212:对应2行1列的网格,选取第2个位置

Matplotlib允许在同一张画布上混合不同的网格划分:你先创建了2行2列网格的前两个子图,再用212创建子图时,这个子图会占据2行1列网格的第二行区域——刚好覆盖原2行2列网格的整个第二行,和前两个子图没有位置冲突,因此能实现你要的跨行占位效果。

修改后的完整代码

import matplotlib.pyplot as plt

fig = plt.figure(figsize=[10,10])

# 2行2列网格的前两个子图
ax0 = fig.add_subplot(221)
ax0.scatter(xlist[:10], ylist[:10], color='red')

ax1 = fig.add_subplot(222)
ax1.scatter(xlist[10:], ylist[10:], color='green')

# 2行1列网格的第二个子图,占据整行
ax3 = fig.add_subplot(212)
ax3.scatter(xlist, ylist)

plt.show()

额外说明

这种混合子图参数的方式是利用Matplotlib布局系统的灵活性,在简单跨行场景下比GridSpec更简洁。如果是更复杂的多跨行跨列布局,GridSpec会是更可控的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:03:27