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

保留Matplotlib子图格式将多组图片保存为PDF的技术问询

批量保存Matplotlib子图为PDF的可行方案

核心思路

利用Matplotlib自带的PdfPages类,将每组1行2列的子图批量写入PDF文档——既可以把所有子图组整合到单个PDF,也能按组生成独立PDF文件,完全保留原有子图布局。

具体实现步骤

  • 导入依赖库:pandas处理数据,matplotlib.pyplot绘制子图,PdfPages负责PDF生成,PIL.Image读取图片文件
  • 初始化PDF对象(单PDF存所有组的场景)
  • 循环遍历DataFrame的每一行:
    • 创建1行2列的子图布局,按需设置画布尺寸
    • 读取identity和img列对应的图片文件
    • 将图片分别绘制到两个子图轴上,可按需关闭坐标轴、添加标题
    • 调整子图间距避免元素重叠
    • 将当前画布添加到PDF对象,随后关闭画布释放内存
  • 循环结束后关闭PDF对象,完成保存

代码示例

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
from PIL import Image

# 读取你的数据(替换为实际数据路径)
df = pd.read_csv("你的数据文件.csv")

# 方案1:所有子图组保存到同一个PDF
with PdfPages("批量图片组合集.pdf") as pdf:
    for idx, row in df.iterrows():
        # 创建1行2列子图,设置合适的画布尺寸
        fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(12, 6))
        
        # 绘制identity列的图片
        img_id = Image.open(row["identity"])
        ax0.imshow(img_id)
        ax0.axis('off')  # 关闭坐标轴,按需选择
        ax0.set_title("Identity图")
        
        # 绘制img列的图片
        img_main = Image.open(row["img"])
        ax1.imshow(img_main)
        ax1.axis('off')
        ax1.set_title("Main图")
        
        # 自动调整子图间距,避免标题/图片重叠
        plt.tight_layout()
        # 将当前画布写入PDF
        pdf.savefig(fig)
        # 关闭画布,释放内存
        plt.close(fig)

# 方案2:每组子图单独保存为独立PDF
for idx, row in df.iterrows():
    fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(12, 6))
    
    img_id = Image.open(row["identity"])
    ax0.imshow(img_id)
    ax0.axis('off')
    ax0.set_title("Identity图")
    
    img_main = Image.open(row["img"])
    ax1.imshow(img_main)
    ax1.axis('off')
    ax1.set_title("Main图")
    
    plt.tight_layout()
    # 按行索引命名保存,可自定义命名规则
    plt.savefig(f"图片组_{idx}.pdf")
    plt.close(fig)

关键注意事项

  • 必须在每次循环后调用plt.close(fig),否则大量图片会占用过多内存,导致程序卡顿
  • figsize参数可根据图片实际分辨率调整,保证保存后的PDF清晰度
  • 若处理灰度图,可在imshow中添加cmap="gray"参数优化显示
  • 如果图片路径存在缺失,建议在循环中加入异常捕获(如try-except)避免程序中断

参考知识点

  • PdfPages类:Matplotlib官方提供的批量PDF生成工具,支持多画布写入、自定义PDF元数据
  • plt.subplots()布局控制:通过nrows/ncols快速生成规则子图网格,返回画布和轴对象
  • PIL.Image读取:支持JPG/PNG等绝大多数常见图片格式,读取后直接适配Matplotlib的imshow方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:45:37