it-swarm.com.de

So speichern Sie ein Seaborn-Diagramm in einer Datei

Ich habe folgenden Code (test_seaborn.py) ausprobiert:

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 gehe davon aus, dass der endgültige output.png vorhanden ist und wie folgt aussieht:

 enter image description here

Wie kann ich das Problem lösen?

90
neversaint

Entferne den get_figure und benutze einfach 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")
78
Folkong

Die vorgeschlagenen Lösungen sind mit Seaborn 0.8.1 nicht kompatibel

die folgenden Fehler werden angezeigt, 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

Mit den folgenden Aufrufen können Sie auf die Zahl zugreifen (kompatibel mit Seaborn 0.8.1):

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

wie zuvor in diese Antwort gesehen.

UPDATE: Ich habe kürzlich das PairGrid-Objekt von Seaborn verwendet, um ein Diagramm ähnlich dem in diesem Beispiel ..__ zu generieren B. sns.swarmplot, hat es keine get_figure () - Funktion . Es ist möglich, direkt auf die Matplotlib-Figur zuzugreifen

fig = myGridPlotObject.fig

Wie schon in anderen Beiträgen in diesem Thread vorgeschlagen.

111

Einige der oben genannten Lösungen haben bei mir nicht funktioniert. Das .fig-Attribut wurde nicht gefunden, als ich es versuchte, und ich konnte .savefig() nicht direkt verwenden. 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 anderes auf die gleichen Probleme stößt wie ich.

21
D.Mercer

Sie sollten nur die savefig-Methode von sns_plot direkt verwenden können.

sns_plot.savefig("output.png")

Wenn Sie die Matplotlib-Figur, in der sich sns_plot befindet, abrufen möchten, können Sie sie direkt mit dem Code abrufen

fig = sns_plot.fig

In diesem Fall gibt es keine get_figure-Methode, da Ihr Code voraussetzt.

13
Simon Gibbons

Ich verwende distplot und get_figure, um das Bild erfolgreich zu speichern.

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

Sie würden eine Fehlermeldung erhalten, wenn Sie sns.figure.savefig("output.png") in Seaborn 0.8.1 verwenden.

Verwenden Sie stattdessen:

import seaborn as sns

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

Es ist auch möglich, einfach ein matplotlib figure-Objekt zu erstellen und dann plt.savefig(...) zu verwenden:

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
tttthomasssss

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')
1
Niraj D Pandey