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

如何在Seaborn中生成指定数量子图?需绘制13张子图

如何在Matplotlib中仅绘制13张子图(3行5列网格布局)

当然可以!有两种常用的方法来实现这个需求,我帮你详细拆解一下:

方法一:创建完整网格后隐藏多余子图

这是最直接的方案,基于你现有的代码修改即可。先创建3行5列的全部15个轴对象,然后只使用前13个,最后把多余的两个隐藏起来:

import matplotlib.pyplot as plt

# 按原代码创建3行5列的子图网格
fig, axes = plt.subplots(nrows=3, ncols=5, figsize=(16,10))
# 将二维的axes数组展平为一维,方便遍历
axes_flat = axes.flatten()

# 遍历前13个轴,添加你的绘图内容(这里用示例曲线代替)
for idx in range(13):
    axes_flat[idx].plot([1, 2, 3], [idx, idx+1, idx+2])
    axes_flat[idx].set_title(f"子图 {idx+1}")

# 隐藏最后两个未使用的子图
for ax in axes_flat[13:]:
    ax.set_visible(False)

# 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()
plt.show()

方法二:用GridSpec按需创建子图

如果你想更精准地控制子图的创建(只生成需要的13个,不创建多余的),可以使用matplotlib.gridspec.GridSpec来实现:

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

fig = plt.figure(figsize=(16,10))
# 创建3行5列的网格布局模板
gs = GridSpec(3, 5, figure=fig)

# 按需创建13个子图,对应网格的前13个位置
axes = []
for idx in range(13):
    # 计算当前子图所在的行和列
    row = idx // 5
    col = idx % 5
    # 从GridSpec中获取对应位置的子图
    ax = fig.add_subplot(gs[row, col])
    ax.plot([1, 2, 3], [idx, idx+1, idx+2])
    ax.set_title(f"子图 {idx+1}")
    axes.append(ax)

plt.tight_layout()
plt.show()

两种方法的小对比

  • 方法一:代码改动最小,适合快速调整现有代码;缺点是会创建多余的轴对象(但对性能影响可以忽略)。
  • 方法二:更灵活,只生成需要的子图,内存占用略低;适合需要精细控制布局的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:17:43