【问题标题】:how to export to pdf a graph based on a pandas dataframe?如何将基于熊猫数据框的图形导出为 pdf?
【发布时间】:2016-02-18 14:40:24
【问题描述】:

我有一个 pandas 数据框,我正在使用有用的 .plot() 方法。

数据框看起来像

col1   col2   col3
1      2      3
7      0      3
1      2      2

因此我使用df.plot() 来获取我想要的图表。

问题是,我想将图表导出为 pdf。理想情况下,我还可以生成其他图表(基于此数据框)并将它们添加到 pdf 中。

有可能吗? 谢谢!

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    要将单个图形输出为pdf,可以使用plt.savefig('myfile.pdf')

    import matplotlib.pyplot as plt
    import pandas as pd
    
    df = pd.DataFrame([[1,2,3],[7,0,3],[1,2,2]],columns=['col1','col2','col3'])
    
    df.plot()
    
    plt.savefig('myfile.pdf')
    

    要将多张图片输出到一个pdf,可以使用PdfPages,如示例here所示。

    一个最小的例子:

    import matplotlib.pyplot as plt
    import pandas as pd
    from matplotlib.backends.backend_pdf import PdfPages
    
    df = pd.DataFrame([[1,2,3],[7,0,3],[1,2,2]],columns=['col1','col2','col3'])
    
    with PdfPages('multipage_pdf.pdf') as pdf:
    
        df.plot()
        pdf.savefig()
        plt.close()
    
        df.plot(kind='bar')
        pdf.savefig()
        plt.close()
    

    【讨论】:

    • 谢谢你,汤姆,这个解决方案效果很好。唯一的问题,当我尝试重新运行您的代码时遇到IOError: [Errno 13] Permission denied: 'myfile.pdf'。我关闭了文件,我有写作权..有什么想法吗?
    • 您是否在其他应用程序中打开了 pdf 文件?也许这会阻止你覆盖它?
    • 我没有,但我只是关闭了包含该文件的窗口,它又可以工作了。我想这就是问题
    • 汤姆只是一个后续问题。你知道如何在 pdf 中添加一些边距吗?截至目前,代码复制粘贴图表时几乎没有边距,因此 y 刻度不易阅读。
    • 试试plt.subplots_adjust(left=0.3)
    【解决方案2】:

    以下应该做:

    plot = df.plot()
    plot.get_figure().savefig('output.pdf', format='pdf')
    

    这实际上取决于您的后端是否支持 pdf 输出(大多数支持)。检查:

    'pdf' in plot.get_figure().canvas.get_supported_filetypes()
    

    【讨论】:

    • 这个答案比当前接受的答案简单得多,如果您从savefig 中删除format='pdf',它可能会更短。 pandas 从文件扩展名推断格式,因此只需 output.pdf(或 output.pngoutput.svg)也可以。
    【解决方案3】:

    以下代码创建一个 2 页的 pdf(每页一个图):

    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_pdf import PdfPages
    
    df = pd.DataFrame({'col1': [1, 3, 7], 'col2': [1, 4, 5], 'col3': [2, 7, 1]})
    
    with PdfPages('foo.pdf') as pdf:
       fig=df.plot(x='col1', y='col2').get_figure()
       pdf.savefig(fig)
    
       fig=df.plot(x='col1', y='col3').get_figure()
       pdf.savefig(fig)
    

    您可以通过重复最后两行来添加任意数量的图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-19
      • 2021-06-24
      • 1970-01-01
      • 2016-05-16
      • 2020-11-07
      • 2018-02-28
      • 2023-01-12
      相关资源
      最近更新 更多