2016-03-15 9 views
8

Sto iniziando a imparare un po 'di python (usato R) per l'analisi dei dati. Sto cercando di creare due grafici usando seaborn, ma continua a salvare il secondo in cima al primo. Come posso fermare questo comportamento?Interrompi il Seaborn plottando più figure uno sopra l'altro

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

risposta

14

Devi iniziare una nuova figura, al fine di farlo. Ci sono diversi modi per farlo, supponendo che tu abbia matplotlib. Liberati anche di get_figure() e puoi usare plt.savefig() da lì.

Metodo 1

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

Metodo 2

chiamata plt.figure() prima di ognuno

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

Grazie. Ho pensato che fosse qualcosa di simile - non riuscivo a trovare i comandi giusti! – Alex

+1

Questa risposta "funziona", ma è un IMO un po 'meno preferito in quanto si basa sull'interfaccia macchina a stati matplotlib piuttosto che sull'interfaccia orientata agli oggetti. Va bene per trame veloci, ma a un certo punto quando si ridimensiona in complessità sarebbe meglio usare quest'ultimo. – mwaskom

5

creare figure e la trama specifici su di loro:

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