3

パンダのデータフレームとシリーズに基づいていくつかのデータをプロットしています。以下は私のコードの一部です。このコードはエラーになります。

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()

2 つの質問があります。

  1. 1 つの出力で複数のプロットをプロットする方法は? (ここでは、プロットごとに複数の出力を取得します)
  2. これらすべてのプロットを 1 つの pdf に書き込む方法は?

これは関連する質問として見つけました。

4

3 に答える 3

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()
于 2013-07-08T10:37:12.623 に答える
2

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')
于 2013-07-08T10:16:40.727 に答える
1

matplotlib既定では、プロットを 1 つの Figure にマージします。次のスニペットを参照してください -

>>> 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が得られました。

于 2013-07-08T10:01:20.550 に答える