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:
Wie kann ich das Problem lösen?
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")
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.
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.
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.
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')
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")
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
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')