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

如何用Matplotlib将主位图与多张子图阵列并排绘制

主位图与小图阵列并排展示解决方案

你之前的问题出在创建了两个独立的Figure窗口,自然没法实现并排布局。要把两部分放在同一个Figure里,用网格布局划分区域就能解决,下面是修改后的完整代码:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from math import sqrt, ceil
import numpy as np

# ---------------------- 替换成你的实际数据 ----------------------
# 模拟测试数据(实际使用时删除这部分,导入你的真实数据)
im = np.random.rand(200, 200)  # 主位图数据
indices = list(range(25))       # 小图索引列表
S = 20                         # 小图的边长
val = [np.random.rand(S*S) for _ in indices]  # 小图扁平化数据
tiles_dictionary = {i: f"Tile {i+1}" for i in indices}  # 小图标题字典
# --------------------------------------------------------------

# 计算小图网格的行列数
columns = int(sqrt(len(indices)))
rows = int(ceil(len(indices) / columns))

# 创建整体画布,用GridSpec划分布局:行数=小图行数,列数=小图列数+1(左边留一列放主图)
fig = plt.figure(figsize=(14, 8))
gs = gridspec.GridSpec(rows, columns + 1)

# 绘制左侧主位图:占满所有行的第0列
ax_main = fig.add_subplot(gs[:, 0])
ax_main.imshow(im, cmap='gray', vmin=0, vmax=1)
ax_main.set_title("主位图")
ax_main.axis('off')  # 不需要坐标轴可关闭

# 绘制右侧小图阵列
for i in range(len(indices)):
    # 计算当前小图在网格中的位置
    row_idx = i // columns
    col_idx = i % columns + 1  # 偏移1列,避开主图的位置
    ax = fig.add_subplot(gs[row_idx, col_idx])
    # 绘制小图
    ax.imshow(val[i].reshape(S, S), cmap='gray', vmin=0, vmax=1)
    ax.set_title(f"Q: {tiles_dictionary[i]}", fontsize=10)
    ax.axis('off')  # 关闭小图的坐标轴,更整洁

# 自动调整布局,避免标题、图像重叠
plt.tight_layout()
plt.show()

关键要点

  • 用GridSpec灵活划分画布区域,左侧主图占满所有行的第一列,右侧小图在剩余列中按网格排列
  • 所有绘图操作都在同一个Figure中完成,避免创建多个独立窗口
  • 最后调用tight_layout()自动调整元素间距,解决重叠问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:45:31