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

如何用matplotlib将多张图片与图表保存到PDF同一页面?

解决单页PDF包含两张图片+CSV图表的问题

直接用matplotlib的子图布局把三个元素塞进同一个画布,再保存成PDF就能搞定单页,不用每次单独绘图加页。给你写个完整示例:

步骤说明

  1. 导入所需库:用pandas处理CSV,PIL读取图片,matplotlib负责绘图和PDF保存
  2. 读取CSV数据生成图表
  3. 读取本地两张图片
  4. 创建画布并划分子区域,分别放置两张图片和图表
  5. 将内容绘制到对应区域,最后保存为单页PDF

完整代码示例

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

# 1. 读取CSV数据(替换成你的实际列名和文件路径)
df = pd.read_csv("你的数据.csv")
x_data = df["x列名"]
y_data = df["y列名"]

# 2. 读取两张本地图片(替换成你的实际图片路径)
img1 = Image.open("图片1.jpg")
img2 = Image.open("图片2.png")

# 3. 创建画布并设置子图布局,这里用1行3列的布局,可按需调整
fig = plt.figure(figsize=(12, 6))  # 画布宽12英寸,高6英寸

# 子图1:放置第一张图片
ax1 = fig.add_subplot(1, 3, 1)
ax1.imshow(img1)
ax1.axis('off')  # 隐藏坐标轴
ax1.set_title("图片1")

# 子图2:放置CSV生成的图表(这里用折线图,可换成bar柱状图等)
ax2 = fig.add_subplot(1, 3, 2)
ax2.plot(x_data, y_data)
ax2.set_title("CSV统计图表")
ax2.set_xlabel("X轴说明")
ax2.set_ylabel("Y轴说明")

# 子图3:放置第二张图片
ax3 = fig.add_subplot(1, 3, 3)
ax3.imshow(img2)
ax3.axis('off')
ax3.set_title("图片2")

# 自动调整子图间距,避免内容重叠
plt.tight_layout()

# 4. 保存为单页PDF
with PdfPages("单页结果.pdf") as pdf:
    pdf.savefig(fig)  # 把整个画布存入PDF,即为单页

plt.close()

注意事项

  • 替换代码里的文件路径、列名为你自己的实际内容
  • 如果需要更灵活的布局(比如让图表占更大空间),可以用matplotlib.gridspec.GridSpec来划分区域
  • 要是PIL读取图片报错,可改用plt.imread("图片路径")直接读取,用法和ax.imshow()兼容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:05:51