2013-05-06 4 views
53

Ich habe meine IPython Notebook mitStellen mehr als ein Diagramm in derselben IPython Notebook Zelle

ipython notebook --pylab inline 

gestartet Dies ist mein Code in einer Zelle

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

Dies funktioniert gut, wird es zwei Unentschieden Linien, aber auf dem gleichen Diagramm.

Ich möchte jede Zeile auf einem separaten Diagramm zeichnen. Und es wäre toll, wenn die Charts nebeneinander liegen würden, nicht nacheinander.

Ich weiß, dass ich die zweite Zeile in die nächste Zelle setzen kann, und dann würde ich zwei Diagramme bekommen. Aber ich möchte, dass die Diagramme nahe beieinander liegen, weil sie die gleiche logische Einheit darstellen.

Antwort

56

Nehmen Sie die mehrachsige erste und an die Funktion Pandas Grundstück passieren, wie:

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

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

Es gibt Ihnen noch 1 Figur, aber mit zwei verschiedenen Parzellen nebeneinander.

+2

Dies funktioniert. Jetzt werde ich nicht die Größe des Bildes ändern. Ich kann es mit fig machen, axs = pltplots (1,2, figsize = (15, 5)). Gibt es eine Möglichkeit, die Bildgröße in Pixeln festzulegen? – WebOrCode

+0

Die Verwendung der Fidsize ist in der Tat der Weg, das ist die Größe in Zoll. Wie viele Pixel davon abhängen, hängt von der dpi ab, die für die Anzeige auf dem Bildschirm festgelegt ist. Aber um es zu speichern, kann es durch Hinzufügen des dpi-Schlüsselworts eingestellt werden. –

+2

Es ist nicht ganz genau, dass die dpi für die Bildschirmdarstellung fest ist (naja, es ist * und * ist es nicht). IPython zeigt Bilder ausschließlich anhand ihrer Pixelgröße an, und diese Pixelgröße wird in matplotlib durch Multiplizieren der Bildgröße in Zoll mit der 'savefig.dpi'-Konfiguration bestimmt. Inline-Zahlen verwenden den gleichen Savefig-Pfad wie das Schreiben von Dateien. – minrk

54

Sie können die Funktion show() auch nach jedem Plot aufrufen. z

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

siehe Beispiel - http://nbviewer.ipython.org/6151560

+1

Großartig, aber wie wird der Plotbildort eingestellt, wie (2,2) oder (1,2)? – Pythoner

+0

Mit dieser Option erscheinen die Diagramme notwendigerweise nacheinander. Für mehr Kontrolle über das Gesamtlayout ist 'pyplot.subplots()' der richtige Weg. – EOL

5

Ein anderer Weg, für Abwechslung. Dies ist zwar etwas weniger flexibel als die anderen. Leider erscheinen die Grafiken übereinander statt nebeneinander, was Sie in Ihrer ursprünglichen Frage angefordert haben. Aber es ist sehr prägnant.

df.plot(subplots=True) 

Wenn der Datenrahmen mehr als die beiden Serien hat, und Sie wollen nur diese beiden zeichnen, müssen Sie df mit df[['korisnika','osiguranika']] ersetzen.

1

Ich weiß nicht, ob diese neue Funktionalität ist, aber das wird Plotten auf separaten Zahlen:

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

während diese auf der gleichen Figur plot: (genau wie der Code in der op)

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

Ich fand diese Frage, weil ich die frühere Methode benutzte und wollte, dass sie auf der gleichen Zahl plotten, so war Ihre Frage tatsächlich meine Antwort.

1

Etwas wie folgt aus:

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

Beachten Sie, dass dies auch funktionieren, wenn Sie die seaborn Paket zum Plotten verwenden:

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