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

Python循环中如何将DataFrame散点图批量保存至单个PDF文件

问题:将多个DataFrame散点图保存到单个PDF文件中

你尝试用以下代码保存散点图到PDF时出现错误:

pdf = matplotlib.backends.backend_pdf.PdfPages("./output.pdf")
for df in list_degs_dfs:
    dfplt = df.plot.scatter("DEratio", "MI_scaled")
    pdf.savefig(dfplt)
pdf.close()

错误信息:

ValueError: No figure AxesSubplot(0.125,0.11;0.775x0.77)

后续尝试转换对象时又触发新错误:

import matplotlib.pyplot as plt
pdf = matplotlib.backends.backend_pdf.PdfPages("./output.pdf")
for df in list_degs_dfs:
    dfplt = df.plot.scatter("DEratio", "MI_scaled")
    dfplt = plt.figure(dfplt)
    pdf.savefig(dfplt.Figure)
pdf.close()

错误信息:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'AxesSubplot'

核心原因

df.plot.scatter()返回的是AxesSubplot对象(坐标轴实例),而PdfPages.savefig()需要传入的是Figure对象(画布实例),直接传递Axes会触发第一个错误;plt.figure()不接受Axes对象作为参数,因此触发第二个错误。

正确解决方案

方案1:从Axes获取对应Figure

通过Axes对象的get_figure()方法提取所属的Figure,再传入savefig():

import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages

pdf = PdfPages("./output.pdf")
for df in list_degs_dfs:
    # 生成散点图,得到Axes实例
    ax = df.plot.scatter("DEratio", "MI_scaled")
    # 从Axes获取关联的Figure
    fig = ax.get_figure()
    # 保存当前Figure到PDF
    pdf.savefig(fig)
    # 关闭Figure释放内存
    plt.close(fig)
pdf.close()

方案2:手动创建Figure和Axes

提前创建Figure和Axes,指定pandas绘图时使用该Axes,直接操作Figure:

import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages

pdf = PdfPages("./output.pdf")
for df in list_degs_dfs:
    # 手动创建画布和坐标轴
    fig, ax = plt.subplots()
    # 强制pandas在指定Axes上绘图
    df.plot.scatter("DEratio", "MI_scaled", ax=ax)
    # 保存画布到PDF
    pdf.savefig(fig)
    plt.close(fig)
pdf.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:51:20