如何用matplotlib将多张图片与图表保存到PDF同一页面?
解决单页PDF包含两张图片+CSV图表的问题
直接用matplotlib的子图布局把三个元素塞进同一个画布,再保存成PDF就能搞定单页,不用每次单独绘图加页。给你写个完整示例:
步骤说明
- 导入所需库:用pandas处理CSV,PIL读取图片,matplotlib负责绘图和PDF保存
- 读取CSV数据生成图表
- 读取本地两张图片
- 创建画布并划分子区域,分别放置两张图片和图表
- 将内容绘制到对应区域,最后保存为单页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
相关产品推荐
相关产品推荐

