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

如何更改子图排列顺序?如何实现垂直排列布局?

实现垂直优先的子图布局(向下再向右排列)

Matplotlib默认的子图排列是行优先(向右再向下),要实现你需要的列优先(向下再向右)布局,有两种简单可行的方法:

方法1:手动生成列优先的子图索引

subplot(nrows, ncols, index)的索引从1开始,要实现列优先排列,只需要按「先遍历列,再遍历行」的逻辑生成索引序列。

以3行2列为例,索引顺序是[1,4,2,5,3,6],通用的代码实现如下:

import matplotlib.pyplot as plt

nrows = 3
ncols = 2

# 生成列优先的索引列表
col_first_indices = []
for col in range(ncols):
    for row in range(nrows):
        # 计算索引:行号 + 列号*行数 + 1(subplot索引从1开始)
        idx = row + col * nrows + 1
        col_first_indices.append(idx)

# 逐个创建子图并标记序号
for idx in col_first_indices:
    ax = plt.subplot(nrows, ncols, idx)
    ax.text(0.5, 0.5, str(idx), ha='center', va='center', fontsize=16)

plt.tight_layout()
plt.show()

方法2:使用GridSpec指定排列顺序

如果需要更灵活的布局控制,matplotlib.gridspec.GridSpec支持直接设置排列顺序,通过order='F'参数即可启用列优先(Fortran顺序),默认的order='C'是行优先(C语言顺序)。

代码示例:

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

nrows = 3
ncols = 2

# 创建列优先的GridSpec
gs = GridSpec(nrows, ncols, figure=plt.figure(), order='F')

# 遍历所有子图位置
for i in range(nrows * ncols):
    ax = plt.subplot(gs[i])
    ax.text(0.5, 0.5, str(i+1), ha='center', va='center', fontsize=16)

plt.tight_layout()
plt.show()

这两种方法都可以适配任意行数和列数的场景,只需要修改nrows和ncols的值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:50:19