web-dev-qa-db-fra.com

Arrêtez Seaborn de tracer plusieurs figurines les unes sur les autres

Je commence à apprendre un peu de python (en utilisant R) pour l'analyse des données. J'essaie de créer deux tracés en utilisant seaborn, mais cela continue de sauvegarder le second en plus du premier. Comment puis-je arrêter ce comportement?

import seaborn as sns
iris = sns.load_dataset('iris')

length_plot = sns.barplot(x='sepal_length', y='species', data=iris).get_figure()
length_plot.savefig('ex1.pdf')
width_plot = sns.barplot(x='sepal_width', y='species', data=iris).get_figure()
width_plot.savefig('ex2.pdf')
22
Alex

Vous devez commencer une nouvelle figure pour ce faire. Il existe plusieurs façons de le faire, en supposant que vous avez matplotlib . Débarrassez-vous également de get_figure() et vous pouvez utiliser plt.savefig() à partir de là.

Méthode 1

Utilisez plt.clf()

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset('iris')

length_plot = sns.barplot(x='sepal_length', y='species', data=iris)
plt.savefig('ex1.pdf')
plt.clf()
width_plot = sns.barplot(x='sepal_width', y='species', data=iris)
plt.savefig('ex2.pdf')

Méthode 2

Appelez plt.figure() avant chacun

plt.figure()
length_plot = sns.barplot(x='sepal_length', y='species', data=iris)
plt.savefig('ex1.pdf')
plt.figure()
width_plot = sns.barplot(x='sepal_width', y='species', data=iris)
plt.savefig('ex2.pdf')
37
Leb

Créez des figures spécifiques et tracez-les dessus:

import seaborn as sns
iris = sns.load_dataset('iris')

length_fig, length_ax = plt.subplots()
sns.barplot(x='sepal_length', y='species', data=iris, ax=length_ax)
length_fig.savefig('ex1.pdf')

width_fig, width_ax = plt.subplots()
sns.barplot(x='sepal_width', y='species', data=iris, ax=width_ax)
width_fig.savefig('ex2.pdf')
7
mwaskom

Je suis d'accord avec un commentaire précédent selon lequel l'importation de matplotlib.pyplot n'est pas la meilleure pratique d'ingénierie logicielle car elle expose la bibliothèque sous-jacente. Comme je créais et enregistrais des tracés en boucle, j'ai dû effacer la figure et j'ai découvert que cela peut maintenant être fait facilement en important uniquement seaborn:

import seaborn as sns

data = np.random.normal(size=100)
path = "/path/to/img/plot.png"

plot = sns.distplot(data)
plot.get_figure().savefig(path)
plot.get_figure().clf() # this clears the figure

# ... continue with next figure
2
MF.OX