1

在循环打开和绘图时,我正在处理超过 100 个 csv 文件。我的目标是将每个图保存在 pdf 页面上并生成一个大的 pdf 文件,每个页面都包含来自单个文件的图。我正在看这些例子 - (1)(2)。使用 I 尝试组合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 是空的。

4

1 回答 1

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()
于 2020-04-01T02:06:19.103 回答