如何将批量生成的Plotly散点图保存至单个PDF文件?
将批量Plotly散点图合并为单个PDF的解决方案
Plotly本身不支持直接将多个图表导出到单个PDF,需要先把每个图表转为图片,再用PDF处理库合并。下面是具体实现步骤:
1. 安装依赖库
需要三个核心库:
- plotly:生成图表
- kaleido:将Plotly图表导出为图片
- fpdf2:合并图片为PDF
执行安装命令:
pip install plotly kaleido fpdf2
2. 完整代码实现
import plotly.express as px from fpdf import FPDF import os import tempfile # 假设stats_ETF是你的目标DataFrame with tempfile.TemporaryDirectory() as temp_dir: image_paths = [] # 遍历所有非Date列生成散点图并保存为PNG for col in stats_ETF.columns[1:]: # 跳过第一列Date,直接遍历其他指标列 fig = px.scatter(stats_ETF, x='Date', y=col) img_path = os.path.join(temp_dir, f"{col}_plot.png") # 导出图片,依赖kaleido引擎 fig.write_image(img_path, engine="kaleido") image_paths.append(img_path) # 初始化PDF对象 pdf = FPDF() # 将每张图片添加到PDF的单独页面 for img_path in image_paths: pdf.add_page() # 设置图片宽度为200(适配A4页面宽度),高度自动按比例缩放 pdf.image(img_path, w=200) # 保存最终PDF文件 pdf.output("ETF_scatter_plots.pdf")
关键说明
- 临时目录管理:用
tempfile.TemporaryDirectory()自动创建临时文件夹,代码执行完毕后会自动删除所有临时图片,避免磁盘冗余。 - 遍历优化:直接遍历
stats_ETF.columns[1:]替代索引循环,代码更简洁且避免索引越界问题。 - 图片导出:
write_image方法必须依赖kaleido引擎,确保Plotly图表能正确转为PNG格式。 - PDF布局:每张图占一个PDF页面,通过设置
w=200让图片适配A4页面宽度,高度自动按比例调整,保证图表完整显示。
内容的提问来源于stack exchange,提问作者Abhinav Agrawal
相关产品推荐
相关产品推荐

