我正在根据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='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()
我有两个问题。
我发现this是一个相关问题。
答案 0 :(得分:5)
以下是给我预期结果的代码部分,可能有更优雅的方法来做到这一点;
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()
答案 1 :(得分:2)
请参阅following,了解使用Pandas的不同子图。
我假设您需要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')
答案 2 :(得分:1)
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格式 -
>>> from matplotlib.backends.backend_pdf import PdfPages
>>> pp = PdfPages('foo.pdf')
>>> testFigure.savefig(pp, format='pdf')
>>> pp.close()
这给了我一张类似数字的PDF。