Crea più di un grafico nella stessa cella di IPython Notebook


88

Ho avviato il mio notebook IPython con

ipython notebook --pylab inline

Questo è il mio codice in una cella

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

Funziona bene, disegnerà due linee, ma sullo stesso grafico.

Vorrei tracciare ogni linea su un grafico separato. E sarebbe fantastico se le classifiche fossero una accanto all'altra, non una dopo l'altra.

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.

Risposte:


89

Crea prima gli assi multipli e passali alla funzione trama di Panda, come:

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

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

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


3
Funziona. Ora non cambierò le dimensioni 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

1
Usare la dimensione della figura è davvero il modo, questa è la dimensione in pollici. Quanti pixel saranno dipende dal dpi, che è fisso per la visualizzazione sullo schermo. Ma per il salvataggio può essere impostato aggiungendo la parola chiave dpi.
Rutger Kassies

3
Non è abbastanza preciso che il dpi sia fisso per la visualizzazione su schermo (beh, lo è e non lo è). IPython visualizza le immagini basandosi esclusivamente sulla loro dimensione in pixel e tale dimensione in pixel è determinata in matplotlib moltiplicando la dimensione della figura in pollici per la savefig.dpiconfigurazione. Le figure in linea usano lo stesso percorso savefig della scrittura dei file.
visone

Grazie per averlo fatto notare, non sapevo che funzionasse così. Tuttavia, non sarebbe più conveniente se si tenesse conto anche del dpi di visualizzazione, poiché è facile da impostare durante la creazione della figura. Per il savefig.dpi non conosco altro modo che mpl.rcParams['savefig.dpi'] = 120. Per il dpi di visualizzazione c'è una parola chiave in molti posti, come plt.figure(dpi=120), ma ora è ignorata, da qui la mia ipotesi sbagliata sul fatto che sia stata corretta.
Rutger Kassies

102

Puoi anche chiamare la funzione show () dopo ogni trama. per esempio

   plt.plot(a)
   plt.show()
   plt.plot(b)
   plt.show()

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

3
Con questa opzione, le trame appaiono necessariamente una dopo l'altra. Per un maggiore controllo sul layout generale, pyplot.subplots()è la strada da percorrere.
Eric O Lebigot

1
Ho rimosso il collegamento.
Tooblippe

12

Qualcosa come questo:

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

Nota che questo funzionerà anche se stai usando il seabornpacchetto per la stampa:

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

11

Un altro modo, per varietà. Anche se questo è un po 'meno flessibile rispetto agli altri. Sfortunatamente, i grafici vengono visualizzati uno sopra l'altro, anziché fianco a fianco, come richiesto nella domanda originale. Ma è molto conciso.

df.plot(subplots=True)

Se il dataframe ha più delle due serie e desideri tracciare solo quelle due, dovrai sostituire dfcon df[['korisnika','osiguranika']].


2

Non so se questa sia una nuova funzionalità, ma verrà tracciata su figure separate:

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

mentre questo verrà tracciato sulla stessa figura: (proprio come il codice nell'operazione)

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.