So speichern Sie einen Seaborn-Plot in einer Datei

Lesezeit: 4 Minuten

Benutzer-Avatar
niemalsheilig

Ich habe folgenden Code versucht (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()

Aber ich bekomme diesen Fehler:

  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'

Ich erwarte das Finale output.png wird existieren und so aussehen:

Geben Sie hier die Bildbeschreibung ein

Wie kann ich das Problem lösen?

  • Die Antwort von @ Terry Wang unten hat bei mir funktioniert – Python 2.7.12 und seaborn 0.7.1

    – Cristian E. Nuno

    20. September 2018 um 19:04 Uhr


  • Ein Einzeiler für 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

    18. November 2018 um 14:17 Uhr

Benutzer-Avatar
Salvatore Cosentino

Die folgenden Aufrufe ermöglichen Ihnen den Zugriff auf die Abbildung (Seaborn 0.8.1 kompatibel):

swarm_plot = sns.swarmplot(...)
fig = swarm_plot.get_figure()
fig.savefig("out.png") 

wie zuvor in dieser Antwort gesehen.

Die vorgeschlagenen Lösungen sind mit Seaborn 0.8.1 nicht kompatibel. Sie geben die folgenden Fehler aus, weil sich die Seaborn-Schnittstelle geändert hat:

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

AKTUALISIEREN:
Ich habe vor kurzem verwendet PairGrid Objekt von Seaborn, um ein Diagramm zu erstellen, das dem in ähnelt dieses Beispiel. In diesem Fall seit GridPlot ist kein Handlungsobjekt wie zum Beispiel sns.swarmplotEs hat keine get_figure() Funktion. Es ist möglich, direkt auf die Matplotlib-Abbildung zuzugreifen:

fig = myGridPlotObject.fig

  • Ich habe kürzlich das PairGrid-Objekt von Seaborn wie im Beispiel verwendet

    – Salvatore Cosentino

    21. Dezember 2016 um 7:10 Uhr

  • Dies ist die einzige Antwort, die auch für PairGrid und JointGrid funktioniert. Ich denke, sie sollte akzeptiert werden.

    – Ryszard Cetnarski

    21. September 2018 um 12:44 Uhr


  • Die Anforderung von get_figure, die Figur zu speichern, ist sehr nervig. Es sollte möglich sein, online einen Plot in einer Datei zu speichern.

    – Minikühlschrank

    10. August 2020 um 11:32 Uhr

Einige der oben genannten Lösungen haben bei mir nicht funktioniert. Das .fig Das Attribut wurde nicht gefunden, als ich das versuchte, und ich konnte es nicht verwenden .savefig() direkt. Was jedoch funktionierte, war:

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

Ich bin ein neuerer Python-Benutzer, daher weiß ich nicht, ob dies auf ein Update zurückzuführen ist. Ich wollte es erwähnen, falls jemand auf die gleichen Probleme stößt wie ich.

  • Das hat bei mir mit a funktioniert seaborn.swarmplotaber für seaborn.lmplot das wird nicht funktionieren. Mit seaborn.lmplotIch fand sns_plot.savefig("output.png") funktionierte wie in Salvatores Antwort, aber ohne Notwendigkeit get_figure() Anruf.

    – Wayne

    12. April 2018 um 13:49 Uhr

  • Dies funktionierte für displot mit seegeboren 0.11.2. Die einzige Antwort, die ich bekommen konnte, um zu arbeiten!

    – Cornelius Römer

    23. November 2021 um 21:25 Uhr


Benutzer-Avatar
Jade-Cache

Weniger Zeilen für Suchende im Jahr 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')

AKTUALISIERUNGSHINWEIS: size geändert wurde height.

  • es erzeugt ein weißes Bild!

    – Günstlinge

    28. Dezember 2020 um 10:42 Uhr

  • @ user_007 nicht sicher, warum Sie ein weißes Bild erhalten. Ich habe den Code heute gerade getestet und er ist sowohl für Jupyter Notebook als auch für die Ausgabedatei in Ordnung. Möglicherweise möchten Sie Ihre Konsole/Python aktualisieren und die Ansichtseinstellungen Ihres Computers überprüfen.

    – Jadecacho

    20. Juli 2021 um 15:17 Uhr

Benutzer-Avatar
Simon Gibbons

Sie sollten nur in der Lage sein, die zu verwenden savefig Methode von sns_plot direkt.

sns_plot.savefig("output.png")

Zur Verdeutlichung Ihres Codes, wenn Sie auf die Matplotlib-Abbildung zugreifen möchten sns_plot wohnt dann kannst du es direkt mit bekommen

fig = sns_plot.fig

In diesem Fall gibt es keine get_figure Methode, wie Ihr Code annimmt.

ich benutze distplot und get_figure Bild erfolgreich zu speichern.

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

  • Arbeitete für meine Umgebung: Funktion sns.distplot() in python 3.5.6 mit seaborn 0.9.0 . Außerdem Funktion sns.pairplot() braucht die Zeile von nicht get_figure()

    – Scott Yang

    1. April 2019 um 7:04 Uhr

Ich konnte die anderen Antworten nicht zum Laufen bringen und habe dies schließlich für matplotlib==3.2.1 zum Laufen gebracht. Dies gilt insbesondere, wenn Sie dies innerhalb einer for-Schleife oder eines iterativen Ansatzes tun.

sns.scatterplot(
    data=df_hourly, x="date_week", y="value",hue="variable"
)
plt.savefig('./f1.png')
plt.show()

Beachten Sie, dass die savefig vor dem Show-Call stehen muss. Andernfalls wird ein leeres Bild gespeichert.

  • Arbeitete für meine Umgebung: Funktion sns.distplot() in python 3.5.6 mit seaborn 0.9.0 . Außerdem Funktion sns.pairplot() braucht die Zeile von nicht get_figure()

    – Scott Yang

    1. April 2019 um 7:04 Uhr

Benutzer-Avatar
4b0

Das funktioniert für mich

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')

1057830cookie-checkSo speichern Sie einen Seaborn-Plot in einer Datei

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy