J'ai essayé le code suivant (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()
Mais je reçois cette erreur:
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'
Je m'attends à ce que le output.png
final existe et ressemble à ceci:
Comment puis-je résoudre le problème?
Supprimez le get_figure
et utilisez simplement 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")
Les solutions suggérées sont incompatibles avec Seaborn 0.8.1
donnant les erreurs suivantes parce que l'interface Seaborn a été modifiée:
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
Les appels suivants vous permettent d’accéder à la figure (compatible Seaborn 0.8.1):
swarm_plot = sns.swarmplot(...)
fig = swarm_plot.get_figure()
fig.savefig(...)
comme vu précédemment dans cette réponse .
UPDATE: J'ai récemment utilisé un objet PairGrid de seaborn pour générer un tracé similaire à celui de cet exemple . Dans ce cas, GridPlot n'étant pas un objet de tracé tel que, Par exemple, sns.swarmplot, il n’a pas de fonction get_figure () . Il est possible d’accéder directement à la figure matplotlib par
fig = myGridPlotObject.fig
Comme précédemment suggéré dans d'autres messages dans ce fil.
Certaines des solutions ci-dessus n'ont pas fonctionné pour moi. L'attribut .fig
n'a pas été trouvé lorsque j'ai essayé et je ne pouvais pas utiliser directement .savefig()
. Cependant, ce qui fonctionnait était:
sns_plot.figure.savefig("output.png")
Je suis un nouvel utilisateur de Python, donc je ne sais pas si cela est dû à une mise à jour. Je voulais le mentionner au cas où quelqu'un d'autre rencontrerait les mêmes problèmes que moi.
Vous devriez juste pouvoir utiliser directement la méthode savefig
de sns_plot
.
sns_plot.savefig("output.png")
Pour plus de clarté avec votre code, si vous souhaitez accéder à la figure matplotlib dans laquelle réside sns_plot
, vous pouvez l’obtenir directement avec
fig = sns_plot.fig
Dans ce cas, il n'y a pas de méthode get_figure
comme le suppose votre code.
J'utilise distplot
et get_figure
pour enregistrer l'image avec succès.
sns_hist = sns.distplot(df_train['SalePrice'])
fig = sns_hist.get_figure()
fig.savefig('hist.png')
Vous obtiendrez une erreur en utilisant sns.figure.savefig("output.png")
dans seaborn 0.8.1.
Utilisez plutôt:
import seaborn as sns
df = sns.load_dataset('iris')
sns_plot = sns.pairplot(df, hue='species', size=2.5)
sns_plot.savefig("output.png")
Il est également possible de créer un objet matplotlib figure
et d'utiliser ensuite 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
Ça marche pour moi
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')