web-dev-qa-db-ja.com

AttributeErrorを返すBarplot savefig()

私はiPythonノートブックをpythonスクリプトに変換しています。いくつかのSeabornプロットの結果をpngファイルとして出力しようとしています。コード:

_import seaborn as sns

...

sns.set_style("whitegrid")
ax = sns.barplot(x=range(1,11), y=[ (x/nrows)*100 for x in addr_pop ], palette="Blues_d")
ax.savefig("html/addr_depth.png")
_

変数について心配する必要はありません。変数は期待どおりに入力されており、iPyNBで見栄えの良いグラフが表示されます。ただし、スクリプト内でコードを実行すると、_RuntimeError: Invalid DISPLAY variable_が生成されます。

別のスレッドに従って、コードを変更し、これをスクリプトの先頭に配置しました。

_import matplotlib
matplotlib.use('Agg')
_

そして、再試行しました。今回は、プロットでsavefig()メソッドを使用できるようには見えません。

_AttributeError: 'AxesSubplot' object has no attribute 'savefig'
_

このエラーを検索するすべての結果は、pandasおよび既に表示されているプロットに関連しています。私はSeabornにイチジクをファイルに出力させようとしています。理想的には、すべて。

どんな助けでもありがたいです。

15
economy

変更することで問題を解決しました

_ax.savefig('file.png')
_

_ax.figure.savefig('file.png')
_

図に直接アクセスすることは、バープロットのsavefig()メソッドにアクセスする1つの方法だと思います。

@WoodChopperにも有効なソリューションがありますが、これには別のインポートステートメントが必要であり、pyplotのsavefig()を直接利用します。

どちらのソリューションでも、DISPLAY変数エラーを回避するためにmatplotlib.use('Agg')を設定する必要があります。 参照された投稿 に記載されているように、これは他のmatplotlibライブラリをインポートする前に設定する必要があります。

34
economy

Pyplotをインポートする必要があると思います。

import matplotlib.pyplot as plt
plt.savefig()
8
WoodChopper