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 왕의 대답은 아래로 아래 나를 위해 일한 - Python 2.7.12seaborn 0.7.1
크리스티안 E. 누누

1
하나의 라이너 seaborn 0.9:sns.regplot(x='age', y='income', data=pd.read_csv('income_data.csv')).get_figure().savefig('income_f_age.png')
Anton Tarasenko

답변:


129

제거 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
공지 사항 가능하지만이 대답은 오래된된다. 정답은 여기 Salvatore
Gabriel

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()전화.
Wayne

14

직접 savefig방법 을 사용할 수 있어야합니다 sns_plot.

sns_plot.savefig("output.png")

코드를 명확하게하기 위해 존재하는 matplotlib 그림에 액세스하려는 경우 다음을 사용하여 sns_plot직접 얻을 수 있습니다

fig = sns_plot.fig

이 경우 get_figure코드에서 가정 한 방법 이 없습니다 .


9

사용 distplot하고 get_figure사진을 성공적으로 저장합니다.

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

내 환경에 근무 : 기능 sns.distplot()python 3.5.6seaborn 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 음모를 파일로 저장하는 방법'이라고 말합니다. 불행히도 제안 된 솔루션은 pairplot과 함께 작동하지만 다른 '종류'의 플롯에서는 예외가 발생합니다. 앞으로 출시 될 릴리스에서 바다 그림에서 '그림'객체를 얻는보다 통일 된 방법이있을 것입니다.
Salvatore Cosentino
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.