Wypróbowałem następujący kod ( 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()
Ale pojawia się ten błąd:
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'
Spodziewam się, że finał output.png
będzie istniał i będzie wyglądał tak:
Jak mogę rozwiązać problem?
python
pandas
matplotlib
seaborn
neversaint
źródło
źródło
Python 2.7.12
iseaborn 0.7.1
seaborn 0.9
:sns.regplot(x='age', y='income', data=pd.read_csv('income_data.csv')).get_figure().savefig('income_f_age.png')
Odpowiedzi:
Usuń
get_figure
i po prostu użyjsns_plot.savefig('output.png')
źródło
AttributeError: 'AxesSubplot' object has no attribute 'savefig'
Sugerowane rozwiązania są niekompatybilne z Seaborn 0.8.1
podając następujące błędy, ponieważ zmienił się interfejs Seaborn:
Poniższe wywołania umożliwiają dostęp do rysunku (kompatybilny z Seaborn 0.8.1):
jak widać wcześniej w tej odpowiedzi .
UPDATE: Niedawno użyłem obiektu PairGrid z seaborn do wygenerowania wykresu podobnego do tego w tym przykładzie . W tym przypadku, ponieważ GridPlot nie jest obiektem wykresu, jak na przykład sns.swarmplot, nie ma funkcji get_figure (). Istnieje możliwość bezpośredniego dostępu do rysunku matplotlib przez
Jak sugerowano wcześniej w innych postach w tym wątku.
źródło
Niektóre z powyższych rozwiązań u mnie nie działały.
.fig
Atrybut nie został znaleziony, gdy próbowałem tego i nie byłem w stanie używać.savefig()
bezpośrednio. Jednak zadziałało:Jestem nowszym użytkownikiem Pythona, więc nie wiem, czy jest to spowodowane aktualizacją. Chciałem o tym wspomnieć na wypadek, gdyby ktoś inny napotkał te same problemy co ja.
źródło
seaborn.swarmplot
, aleseaborn.lmplot
to nie zadziała. Zseaborn.lmplot
, stwierdziłem, żesns_plot.savefig("output.png")
działa jak w odpowiedzi Salvatore, ale bez potrzebyget_figure()
dzwonienia.Powinieneś po prostu móc użyć
savefig
metodysns_plot
bezpośrednio.Dla jasności kodu, jeśli chcesz uzyskać dostęp do rysunku matplotlib, który się
sns_plot
znajduje, możesz go pobrać bezpośrednio za pomocąW takim przypadku nie ma
get_figure
metody, jak zakłada Twój kod.źródło
Używam
distplot
i,get_figure
aby pomyślnie zapisać obrazek.źródło
sns.distplot()
wpython 3.5.6
zseaborn 0.9.0
. Poza tym funkcjasns.pairplot()
nie potrzebuje liniiget_figure()
Mniej wierszy dla wyszukiwarek 2019:
UPDATE NOTE:
size
została zmieniona naheight
.źródło
To działa dla mnie
źródło
Można również po prostu utworzyć
figure
obiekt matplotlib, a następnie użyćplt.savefig(...)
:źródło
sns.figure.savefig("output.png")
Wystąpiłby błąd podczas używania w wersji 0.8.1 Seaaborn.Zamiast tego użyj:
źródło
Do Twojej wiadomości, poniższe polecenie działało w wersji 0.8.1 na seaborn, więc myślę, że początkowa odpowiedź jest nadal aktualna.
źródło