同一图中的多个matplotlib图+;以pdf格式转换为Python

同一图中的多个matplotlib图+;以pdf格式转换为Python,python,pdf,matplotlib,plot,pandas,Python,Pdf,Matplotlib,Plot,Pandas,我正在绘制一些基于熊猫数据帧和系列的数据。下面是我代码的一部分。此代码给出一个错误 RuntimeError: underlying C/C++ object has been deleted from matplotlib import pyplot as plt from matplotlib.backends.backend_pdf import PdfPages fig = plt.figure() dfs = df['col2'].resample('10t', how='cou

我正在绘制一些基于熊猫数据帧和系列的数据。下面是我代码的一部分。此代码给出一个错误

RuntimeError: underlying C/C++ object has been deleted


from matplotlib import pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
fig = plt.figure()

dfs = df['col2'].resample('10t', how='count')
dfs.plot()
plt.show()

reg = df.groupby('col1').size()
reg.sort()
reg[-10:].plot(kind='barh')
plt.show()

pp = PdfPages('foo.pdf')
fig.savefig(pp, format='pdf') 
pp.close()
我有两个问题

  • 如何在一个输出中绘制多个绘图?(这里我为每个绘图获得多个输出)
  • 如何将所有这些绘图写入一个pdf

  • 我发现了一个相关问题。

    matplotlib
    默认情况下将绘图合并为一个图形。请参阅以下代码片段-

    >>> import pylab as plt
    >>> randomList = [randint(0, 40) for _ in range(10)]
    >>> randomListTwo = [randint(0, 40) for _ in range(10)]
    >>> testFigure = plt.figure(1)
    >>> plt.plot(randomList)
    [<matplotlib.lines.Line2D object at 0x03F24A90>]
    >>> plt.plot(randomListTwo)
    [<matplotlib.lines.Line2D object at 0x030B9FB0>]
    >>> plt.show()
    
    这给了我一个类似图的PDF。

    请查看针对不同熊猫子地块的详细信息

    我假设您需要2个子地块(按行方式)。因此,您的代码可以修改如下:

    from matplotlib import pyplot as plt
    
    fig, axes = plt.subplots(nrows=2)
    
    dfs = df['col2'].resample('10t', how='count')
    dfs.plot(ax=axes[0])
    
    reg = df.groupby('col1').size()
    reg.sort()
    reg[-10:].plot(kind='barh',ax=axes[0])
    
    plt.savefig('foo.pdf')
    

    下面是代码的一部分,它给了我预期的结果,可能有更优雅的方法来做到这一点

    def plotGraph(X):
        fig = plt.figure()
        X.plot()
        return fig
    
    
    plot1 = plotGraph(dfs)
    plot2 = plotGraph2(reg[:-10])
    pp = PdfPages('foo.pdf')
    pp.savefig(plot1)
    pp.savefig(plot2)
    pp.close()
    

    正如我所知,子地块是我第一个问题的答案?如何使用它?你在寻找一个通用的答案吗?因为我们不知道您的数据集是什么样子@苏克里特·卡拉:是的,一般的回答?解释够了吗?嗨!你在找这样的情节吗?请看我的答案。记住,当它允许你回答时,请接受你自己的答案,你能清楚地说明你犯了什么错误吗?嘿,非常感谢!无论如何,当我知道怎么做的时候:)!哈哈!酷。不用担心谢谢你,巴特拉!我找到了一种不同的方法来做这件事,你可能希望添加你自己的答案,这样其他人可能会从中受益。好的,当然:)我会提供它!
    def plotGraph(X):
        fig = plt.figure()
        X.plot()
        return fig
    
    
    plot1 = plotGraph(dfs)
    plot2 = plotGraph2(reg[:-10])
    pp = PdfPages('foo.pdf')
    pp.savefig(plot1)
    pp.savefig(plot2)
    pp.close()