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

如何将批量生成的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:50:27