【问题标题】:Saving plots created in a for loop保存在 for 循环中创建的图
【发布时间】:2021-04-19 08:13:52
【问题描述】:

下面的代码生成一组图。但是,当使用 PdfPages 导出绘图时,仅导出 1 个绘图用于 fig2 绘图。 是否可以将创建的其他图导出 - 也可以导出为 pdf?

Dataframe

for c in df3.columns:
    if df3[c].value_counts().count() < 5:
        vc = df3[c].value_counts().sort_values()
        
        # Visualization
        fig1 = plt.figure();
        ax = vc.plot(kind='barh',color=(0.2, 0.4, 0.6, 0.6));
        text   = c +' (Total)'
        ax.set_title(text)
# If 
    elif df3[c].value_counts().count() / df3.shape[0]  < 0.9:
        vc = df3[c].value_counts().head().sort_values()

        # Visualization
        fig2 = plt.figure();
        ax = vc.plot(kind='barh',color=(0.2, 0.4, 0.6, 0.6));
        text   = c +' (Sample)'
        ax.set_title(text)
        
    else:
        pass

from matplotlib.backends.backend_pdf import PdfPages
pp = PdfPages('foo.pdf')
pp.savefig(fig1)
pp.savefig(fig2)
pp.close()

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    一种方法是将所有图形句柄存储在一个列表中。然后列表将包含所有数字,而不仅仅是最后一次迭代:

    figs = []
    
    for c in df3.columns:
        if df3[c].value_counts().count() < 5:
            ...
            figs.append(fig1)
        elif df3[c].value_counts().count() / df3.shape[0] < 0.9:
            ...
            figs.append(fig2)
        else:
            pass
    
    with PdfPages('foo.pdf') as pp:
        for fig in figs:
            pp.savefig(fig)
    

    或者另一种选择是在整个绘图循环周围打开PdfPages 上下文并立即保存每个图形:

    with PdfPages('foo.pdf') as pp:
        for c in df3.columns:
            if df3[c].value_counts().count() < 5:
                ...
                pp.savefig(fig1)
            elif df3[c].value_counts().count() / df3.shape[0] < 0.9:
                ...
                pp.savefig(fig2)
            else:
                pass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多