【问题标题】:Plot and save multiple figures of group by function as pdf绘制并保存多个按功能分组的图形为pdf
【发布时间】:2014-03-21 22:29:34
【问题描述】:

我想创建一个包含 12 个图的 pdf 文件,有两种选择:

  • 每页一个图,
  • 每页四个图。

使用plt.savefig("months.pdf") 只保存最后一个图。

MWE:

import pandas as pd
index=pd.date_range('2011-1-1 00:00:00', '2011-12-31 23:50:00', freq='1h')
df=pd.DataFrame(np.random.randn(len(index),3).cumsum(axis=0),columns=['A','B','C'],index=index)

df2 = df.groupby(lambda x: x.month)
for key, group in df2:
    group.plot()

我也试过了:

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(15, 10))

group.plot 之后,但这产生了四个空白图...

我找到了PdfPages 的示例,但我不知道如何实现。

【问题讨论】:

    标签: python pdf matplotlib plot pandas


    【解决方案1】:

    要在每个页面中保存一个图,请使用:

    from matplotlib.backends.backend_pdf import PdfPages
    
    # create df2
    with PdfPages('foo.pdf') as pdf:
        for key, group in df2:
            fig = group.plot().get_figure()
            pdf.savefig(fig)
    

    为了在一个页面中放置 4 个图,您需要先构建一个包含 4 个图的无花果,然后将其保存:

    import matplotlib.pyplot as plt
    from itertools import islice, chain
    
    def chunks(n, iterable):
        it = iter(iterable)
        while True:
           chunk = tuple(islice(it, n))
           if not chunk:
               return
           yield chunk
    
    with PdfPages('foo.pdf') as pdf:
        for chunk in chunks(4, df2):
            fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 4))
            axes = chain.from_iterable(axes)  # flatten 2d list of axes
    
            for (key, group), ax in zip(chunk, axes):
                group.plot(ax=ax)
    
            pdf.savefig(fig)
    

    【讨论】:

    • 两个选项都很好用:) 你知道热应用你的方法来使用辅助y_axisexample 吗?
    • 如果您愿意 @elyase 我可以将其作为一个单独的问题发布?
    • 我会推荐,我不知道什么时候我会再次使用电脑,并且在中途有人可以帮助你。
    猜你喜欢
    • 2021-05-03
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多