2013-05-06 3 views
53

ho iniziato il mio notebook IPython conRendere più di un grafico in stessa cella Notebook IPython

ipython notebook --pylab inline 

Questo è il mio codice in una cella

df['korisnika'].plot() 
df['osiguranika'].plot() 

Questo sta lavorando bene, trarrà due linee, ma sullo stesso grafico.

Vorrei disegnare ogni riga su un grafico separato. E sarebbe bello se i grafici fossero uno accanto all'altro, non uno dopo l'altro.

So che posso inserire la seconda riga nella cella successiva e quindi otterrei due grafici. Ma vorrei che i grafici fossero vicini tra loro, perché rappresentano la stessa unità logica.

risposta

56

Fai le molteplici assi primo e passarli alla funzione plot panda, come:

fig, axs = plt.subplots(1,2) 

df['korisnika'].plot(ax=axs[0]) 
df['osiguranika'].plot(ax=axs[1]) 

Ti dà ancora 1 figura, ma con due lotti diversi uno accanto all'altro.

+2

Questo è il lavoro. Ora non cambierò la dimensione dell'immagine. Posso farlo con fig, axs = plt.subplots (1,2, figsize = (15, 5)). C'è un modo per impostare la dimensione dell'immagine in pixel? – WebOrCode

+0

L'utilizzo di figsize è davvero il modo, è la dimensione in pollici. Quanti pixel dipende dal dpi, che è fisso per la visualizzazione sullo schermo. Ma per salvarlo può essere impostato aggiungendo la parola chiave dpi. –

+2

Non è abbastanza preciso che il dpi sia fissato per la visualizzazione su schermo (beh, è ​​* e * non lo è). IPython visualizza le immagini basandosi esclusivamente sulla loro dimensione in pixel, e quella dimensione in pixel è determinata in matplotlib moltiplicando la dimensione in cifre in pollici mediante la configurazione 'savefig.dpi'. Le figure incorporate usano lo stesso percorso di salvataggio di file di scrittura. – minrk

54

È inoltre possibile chiamare la funzione show() dopo ciascun grafico. es

plot(a) 
    show() 
    plot(b) 
    show() 

vedi esempio a - http://nbviewer.ipython.org/6151560

+1

Grande, ma come impostare la posizione dell'immagine della trama, come (2,2) o (1,2)? – Pythoner

+0

Con questa opzione, i grafici appaiono necessariamente uno dopo l'altro. Per un maggiore controllo sul layout generale, 'pyplot.subplots()' è la strada da percorrere. – EOL

5

altro modo, per varietà. Anche se questo è un po 'meno flessibile rispetto agli altri. Sfortunatamente, i grafici appaiono uno sopra l'altro, piuttosto che uno affiancato, che hai richiesto nella tua domanda originale. Ma è molto conciso.

df.plot(subplots=True) 

Se il dataframe ha più di due serie, e si desidera solo per tracciare quei due, sarà necessario sostituire df con df[['korisnika','osiguranika']].

1

Non so se questa è una nuova funzionalità, ma questo sarà tracciare su cifre separate:

df.plot(y='korisnika') 
df.plot(y='osiguranika') 

mentre questo sarà trama sulla stessa figura: (proprio come il codice nel PO)

df.plot(y=['korisnika','osiguranika']) 

Ho trovato questa domanda perché stavo usando il metodo precedente e volevo che fossero tracciati sulla stessa figura, quindi la tua domanda era in realtà la mia risposta.

1

Qualcosa di simile a questo:

import matplotlib.pyplot as plt 
... code for plot 1 ... 
plt.show() 
... code for plot 2... 
plt.show() 

Si noti che questo funziona anche se si utilizza il pacchetto seaborn per il tracciato:

import matplotlib.pyplot as plt 
import seaborn as sns 
sns.barplot(... code for plot 1 ...) # plot 1 
plt.show() 
sns.barplot(... code for plot 2 ...) # plot 2 
plt.show()