【问题标题】:Multiple files, multiple plots saved to a multipage, single pdf file多个文件、多个绘图保存到一个多页、单个 pdf 文件
【发布时间】:2020-04-01 01:23:29
【问题描述】:

在循环打开和绘图时,我正在处理超过 100 个 csv 文件。我的目标是将每个图保存在 pdf 页面上,并生成一个大的 pdf 文件,每个页面都包含来自单个文件的图。我正在查看这些示例 - (1)(2)。使用matplotlib.backends.backend_pdf 尝试组合我无法获得所需的结果。

在这里我重新创建了我的代码和我正在使用的方法:

pdf = PdfPages('alltogther.pdf')
fig, ax = plt.subplots(figsize=(20,10))

for file in glob.glob('path*'):
    df_in=pd.read_csv(file)

    df_d = df_in.resample('d') 
    df_m = df_in.resample('m') 

    y1=df_d['column1']
    y2=df_m['column2'] 
    
    plt.plot(y1,linewidth='2.5') 
    plt.plot(y2,linewidth='2.5')
    pdf.savefig(fig) 
    

这样,所有的图都叠加在同一个图形上,生成的 pdf 为空。

【问题讨论】:

    标签: python loops matplotlib plot pdfpages


    【解决方案1】:

    你需要移动线

    fig, ax = plt.subplots(figsize=(20,10))
    

    在循环内部,否则每次迭代都将使用相同的图形实例而不是新实例。另请注意,完成后需要关闭 pdf。所以代码应该是

    pdf = PdfPages('alltogther.pdf')
    
    for file in glob.glob('path*'):
        fig, ax = plt.subplots(figsize=(20,10))
        df_in=pd.read_csv(file)
    
        df_d = df_in.resample('d') 
        df_m = df_in.resample('m') 
    
        y1=df_d['column1']
        y2=df_m['column2'] 
    
        plt.plot(y1,linewidth='2.5') 
        plt.plot(y2,linewidth='2.5')
        pdf.savefig(fig) 
    
    pdf.close()
    

    编辑


    完整、独立的示例:

    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_pdf import PdfPages
    import numpy as np
    
    pdf = PdfPages('out.pdf')
    for i in range(5):
        fig, ax = plt.subplots(figsize=(20, 10))
        plt.plot(np.random.random(10), linestyle=None, marker='.')
        pdf.savefig(fig)
    
    pdf.close()
    

    【讨论】:

    • 感谢您的回复。 pdf 仅存储最后一个图形,而不是全部。
    • @Learning_datascience 我添加了一个完整的、独立的示例。如果你运行那个 exact 代码,你应该得到一个 pdf,它有 5 页,每页包含一个不同的图形。能不能试试看能不能得到我刚才描述的结果?
    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多