105

pandas を使用して、ファイルに保存したいデータフレームからプロットを生成しています。

dtf = pd.DataFrame.from_records(d,columns=h)
fig = plt.figure()
ax = dtf2.plot()
ax = fig.add_subplot(ax)
fig.savefig('~/Documents/output.png')

matplotlib の savefig を使用する最後の行でうまくいくはずです。しかし、そのコードは次のエラーを生成します。

Traceback (most recent call last):
  File "./testgraph.py", line 76, in <module>
    ax = fig.add_subplot(ax)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.py", line 890, in add_subplot
    assert(a.get_figure() is self)
AssertionError

または、プロットで savefig を直接呼び出そうとしても、エラーが発生します。

dtf2.plot().savefig('~/Documents/output.png')


  File "./testgraph.py", line 79, in <module>
    dtf2.plot().savefig('~/Documents/output.png')
AttributeError: 'AxesSubplot' object has no attribute 'savefig'

savefig を使用するには、plot() によって返されたサブプロットを Figure に追加する必要があると思います。また、おそらくこれはAxesSubPlot クラスの背後にある魔法と関係があるのだろうかと思います。

編集:

次は機能しますが(エラーは発生しません)、空白のページ画像が残ります....

fig = plt.figure()
dtf2.plot()
fig.savefig('output.png')

編集 2: 以下のコードも正常に動作します

dtf2.plot().get_figure().savefig('output.png')
4

6 に答える 6

140

gcf メソッドは V 0.14 で廃止されました。以下のコードは私にとってはうまくいきます:

plot = dtf.plot()
fig = plot.get_figure()
fig.savefig("output.png")
于 2014-07-10T10:51:42.867 に答える
19

したがって、これが機能する理由は完全にはわかりませんが、プロットで画像が保存されます。

dtf = pd.DataFrame.from_records(d,columns=h)
dtf2.plot()
fig = plt.gcf()
fig.savefig('output.png')

図がパンダによって生成された軸を取得していなかったため、元の投稿の最後のスニペットが空白で保存されたと推測しています。上記のコードでは、gcf() 呼び出し (現在の図を取得) によって、魔法のグローバル状態から Figure オブジェクトが返され、上の行にプロットされた軸が自動的に焼き付けられます。

于 2013-10-24T02:11:30.370 に答える
7
  • 他の回答は、サブプロットではなく、単一のプロットのプロットを保存することを扱います。
  • サブプロットがある場合、プロット API はnumpy.ndarrayof を返します。matplotlib.axes.Axes
import pandas as pd
import seaborn as sns  # for sample data
import matplotlib.pyplot as plt

# load data
df = sns.load_dataset('iris')

# display(df.head())
   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

でプロットpandas.DataFrame.plot()

  • 次の例では を使用してkind='hist'いますが、 以外を指定した場合も同じ解決策です。'hist'
  • を使用[0]して配列から の 1 つを取得しaxes、 で図を抽出し.get_figure()ます。
fig = df.plot(kind='hist', subplots=True, figsize=(6, 6))[0].get_figure()
plt.tight_layout()
fig.savefig('test.png')

ここに画像の説明を入力

でプロットpandas.DataFrame.hist()

1:

  • この例ではdf.histAxescreated withplt.subplotsに割り当て、それを保存しfigます。
  • 4およびはそれぞれおよび1に使用されますが、およびなどの他の構成も使用できます。nrowsncols22
fig, ax = plt.subplots(nrows=4, ncols=1, figsize=(6, 6))
df.hist(ax=ax)
plt.tight_layout()
fig.savefig('test.png')

ここに画像の説明を入力

2:

  • .ravel()の配列を平坦化するために使用しますAxes
fig = df.hist().ravel()[0].get_figure()
plt.tight_layout()
fig.savefig('test.png')

ここに画像の説明を入力

于 2021-04-21T19:05:36.667 に答える
3

これはより簡単なアプローチかもしれません:

(DesiredFigure).get_figure().savefig('図名.png')

すなわち

dfcorr.hist(bins=50).get_figure().savefig('correlation_histogram.png')
于 2019-02-22T18:14:31.440 に答える