Seabornプロットをファイルに保存する方法


171

私は次のコード(test_seaborn.py)を試しました:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
import seaborn as sns
sns.set()
df = sns.load_dataset('iris')
sns_plot = sns.pairplot(df, hue='species', size=2.5)
fig = sns_plot.get_figure()
fig.savefig("output.png")
#sns.plt.show()

しかし、私はこのエラーを受け取ります:

  Traceback (most recent call last):
  File "test_searborn.py", line 11, in <module>
    fig = sns_plot.get_figure()
AttributeError: 'PairGrid' object has no attribute 'get_figure'

私は決勝戦output.pngが存在し、次のようになることを期待しています:

ここに画像の説明を入力してください

どうすれば問題を解決できますか?


1
@Terry Wangの以下の回答は私にとってうまくいきました- Python 2.7.12そしてseaborn 0.7.1
Cristian E. Nuno

1
のワンライナーseaborn 0.9sns.regplot(x='age', y='income', data=pd.read_csv('income_data.csv')).get_figure().savefig('income_f_age.png')
アントンタラセンコ

回答:


130

を削除してget_figure使用するsns_plot.savefig('output.png')

df = sns.load_dataset('iris')
sns_plot = sns.pairplot(df, hue='species', size=2.5)
sns_plot.savefig("output.png")

38
これはSeaborn 0.7.1では機能しないことに注意してください(他の回答を参照)。
グイド、

31
この回答は受け入れられますが、古くなっていることに注意しください。正解は、ここでサルヴァトーレによって与えられたものです。
ガブリエル

1
2020年のエラー:AttributeError: 'AxesSubplot' object has no attribute 'savefig'
Nyxynyx

234

提案されたソリューションはSeaborn 0.8.1と互換性がありません

Seabornインターフェースが変更されたため、次のエラーが発生します。

AttributeError: 'AxesSubplot' object has no attribute 'fig'
When trying to access the figure

AttributeError: 'AxesSubplot' object has no attribute 'savefig'
when trying to use the savefig directly as a function

次の呼び出しにより、図にアクセスできます(Seaborn 0.8.1互換)。

swarm_plot = sns.swarmplot(...)
fig = swarm_plot.get_figure()
fig.savefig(...) 

以前にこの回答で見たように

更新: 私は最近seabornのPairGridオブジェクトを使用して、この例のようなプロットを生成しました。この場合、GridPlotは、たとえばsns.swarmplotのようなプロットオブジェクトではないため、get_figure()関数はありません。matplotlibの図に直接アクセスすることは可能です

fig = myGridPlotObject.fig

このスレッドの他の投稿で以前に提案されたように。


2
私は最近、例のようにseabornのPairGridオブジェクトを使用しました
Salvatore Cosentino

2
これは、PairGridとJointGridでも機能する唯一の回答です。
Ryszard Cetnarski

41

上記の解決策のいくつかは私にとってはうまくいきませんでした。それ.figを試したときに属性が見つからず、.savefig()直接使用できませんでした。しかし、うまくいったのは:

sns_plot.figure.savefig("output.png")

私は新しいPythonユーザーなので、これが更新によるものかどうかわかりません。他の誰かが私と同じ問題に遭遇した場合に備えて、それについて言及したかったのです。


1
これはで私にとってはうまくいきましたseaborn.swarmplotが、seaborn.lmplotそれはうまくいきません。でseaborn.lmplot、私sns_plot.savefig("output.png")はサルバトーレの答えのように機能することを発見しましたが、get_figure()電話する必要はありませんでした。
ウェイン

14

直接のsavefig方法が使えればいいのですがsns_plot

sns_plot.savefig("output.png")

コードを明確にするために、sns_plot常駐しているmatplotlib Figureにアクセスしたい場合は、次のコマンドで直接取得できます。

fig = sns_plot.fig

この場合get_figure、コードが想定している方法はありません。


9

とを使用distplotget_figureて、画像を正常に保存します。

sns_hist = sns.distplot(df_train['SalePrice'])
fig = sns_hist.get_figure()
fig.savefig('hist.png')

私の環境のために働い:機能sns.distplot()python 3.5.6持ちますseaborn 0.9.0。さらに、関数sns.pairplot()は次の行を必要としませんget_figure()
Scott Yang

9

2019年のサーチャーのための少ない行:

import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('iris')
sns_plot = sns.pairplot(df, hue='species', height=2.5)
plt.savefig('output.png')

更新メモ:sizeに変更されましたheight


3

これは私のために働く

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

sns.factorplot(x='holiday',data=data,kind='count',size=5,aspect=1)
plt.savefig('holiday-vs-count.png')

3

matplotlib figureオブジェクトを作成して使用することもできますplt.savefig(...)

from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd

df = sns.load_dataset('iris')
plt.figure() # Push new figure on stack
sns_plot = sns.pairplot(df, hue='species', size=2.5)
plt.savefig('output.png') # Save that figure

1

sns.figure.savefig("output.png")seaborn 0.8.1 で使用するとエラーが発生します。

代わりに:

import seaborn as sns

df = sns.load_dataset('iris')
sns_plot = sns.pairplot(df, hue='species', size=2.5)
sns_plot.savefig("output.png")

-4

参考までに、以下のコマンドはseaborn 0.8.1で機能したので、最初の回答はまだ有効です。

sns_plot = sns.pairplot(data, hue='species', size=3)
sns_plot.savefig("output.png")

そのコードは機能していますが、完全ではありません。タイトルには、「Seabornプロットをファイルに保存する方法」がより一般的です。残念ながら、提案されたソリューションはペアプロットで機能しますが、他の種類のプロットでは例外が発生します。うまくいけば、将来のリリースでは、海のプロットから「フィギュア」オブジェクトを取得するためのより統一された方法が存在するでしょう。
Salvatore Cosentino、2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.