You need to enable JavaScript to run this app. Matplotlib如何将已保存的现有绘图组合为多面板子图?
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib如何将已保存的现有绘图组合为多面板子图?

Matplotlib拼接已保存PNG为多面板组合图方案

你的思路是正确的,核心逻辑为读取本地PNG文件为图像数组,再分配到子图网格中渲染,具体实现如下:

依赖库

需要导入matplotlib.pyplot和matplotlib.image两个模块即可完成需求,无需额外安装第三方工具。

可运行示例代码

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

# 1. 整理选中的待拼接图片路径,顺序对应子图排列顺序
selected_img_paths = [
    "spatial_plot_01.png",
    "spatial_plot_03.png",
    "spatial_plot_05.png",
    "spatial_plot_07.png"
]
# 2. 定义组合图的行列数,示例为2行2列
row_num = 2
col_num = 2
# 3. 创建画布与子图网格,可通过figsize调整整体尺寸、dpi调整输出清晰度
fig, axs = plt.subplots(nrows=row_num, ncols=col_num, figsize=(12, 9), dpi=150)
# 将二维子图数组展平为一维,方便遍历
axs = axs.flatten()

for ax, img_path in zip(axs, selected_img_paths):
    # 读取PNG文件为图像数组,自动保留透明通道
    img = mpimg.imread(img_path)
    # 将图像渲染到对应子图
    ax.imshow(img)
    # 隐藏子图自带的坐标轴与刻度,避免遮挡原有图片内容
    ax.axis("off")

# 可选:给单个子图添加标题/编号,示例给第一个子图加标注
# axs[0].set_title("2020年空间分布", fontsize=10)

# 自动调整子图间距,避免重叠或留白过多
plt.tight_layout()
# 保存拼接后的组合图,bbox_inches参数避免边缘内容被裁剪
plt.savefig("combined_spatial_plot.png", bbox_inches="tight")
plt.show()

注意事项

  • 若图片数量少于子图数量,可手动对多余子图调用ax.axis("off")隐藏空白坐标轴
  • 若需要自定义子图宽高比例,可在plt.subplots中添加gridspec_kw参数调整,例如gridspec_kw={'height_ratios': [1, 2]}设置两行高度比为1:2
  • 若需要读取JPG等其他格式图片,可导入Pillow库的Image.open读取后转为numpy数组即可,逻辑和上述代码完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:15:04