Erstellen Sie mehr als ein Diagramm in derselben IPython Notebook-Zelle

86

Ich habe mein IPython Notebook mit gestartet

ipython notebook --pylab inline

Dies ist mein Code in einer Zelle

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

Dies funktioniert gut, es werden zwei Linien gezeichnet, aber auf demselben Diagramm.

Ich möchte jede Linie in einem separaten Diagramm zeichnen. Und es wäre großartig, wenn die Charts nebeneinander und nicht nacheinander wären.

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 dieselbe logische Einheit darstellen.

WebOrCode
quelle

Antworten:

86

Machen Sie zuerst die mehreren Achsen und übergeben Sie sie an die Pandas-Plotfunktion, wie:

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

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

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

Rutger Kassies
quelle
3
Das funktioniert. Jetzt werde ich die Bildgröße nicht mehr ändern. Ich kann es mit fig machen, axs = plt.subplots (1,2, figsize = (15, 5)). Gibt es eine Möglichkeit, die Bildgröße in Pixel festzulegen?
WebOrCode
1
Die Verwendung der Feigengröße ist in der Tat der Weg, das ist die Größe in Zoll. Wie viele Pixel das sein werden, hängt von der Auflösung ab, die für die Anzeige auf dem Bildschirm festgelegt ist. Zum Speichern kann dies jedoch durch Hinzufügen des Schlüsselworts dpi festgelegt werden.
Rutger Kassies
2
Es ist nicht ganz genau, dass die Auflösung für die Bildschirmanzeige festgelegt ist (nun, es ist und es ist nicht). IPython zeigt Bilder nur basierend auf ihrer Pixelgröße an. Diese Pixelgröße wird in matplotlib durch Multiplizieren der Figurengröße in Zoll mit der savefig.dpiKonfiguration bestimmt. Inline-Abbildungen verwenden denselben Sicherungspfad wie das Schreiben von Dateien.
Minrk
Vielen Dank für den Hinweis, ich wusste nicht, dass es so funktioniert. Wäre es nicht bequemer, wenn die Anzeige-dpi (auch) berücksichtigt würde, da dies bei der Figurenerstellung einfach einzustellen ist. Für die savefig.dpi kenne ich keinen anderen Weg als mpl.rcParams['savefig.dpi'] = 120. Für die Anzeige dpi gibt es an vielen Stellen ein Schlüsselwort plt.figure(dpi=120), aber das wird jetzt ignoriert, daher meine falsche Annahme, dass es behoben wird.
Rutger Kassies
100

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

   plt.plot(a)
   plt.show()
   plt.plot(b)
   plt.show()
Tooblippe
quelle
1
Großartig, aber wie kann man die Position des Plotbildes einstellen, wie (2,2) oder (1,2)?
Pythoner
3
Mit dieser Option werden die Diagramme notwendigerweise nacheinander angezeigt. Für mehr Kontrolle über das Gesamtlayout pyplot.subplots()ist der richtige Weg.
Eric O Lebigot
1
Ich habe den Link entfernt.
Tooblippe
11

Etwas wie das:

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

Beachten Sie, dass dies auch funktioniert, wenn Sie das seabornPaket 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()
mgoldwasser
quelle
10

Ein anderer Weg für Abwechslung. Dies ist zwar etwas weniger flexibel als die anderen. Leider werden die Grafiken übereinander und nicht nebeneinander angezeigt, 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 planen, müssen Sie ersetzen müssen dfmit df[['korisnika','osiguranika']].

Luciano
quelle
2

Ich weiß nicht, ob dies eine neue Funktionalität ist, aber dies wird in separaten Abbildungen dargestellt:

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

während dies auf der gleichen Abbildung dargestellt wird: (genau wie der Code in der Operation)

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

Ich habe diese Frage gefunden, weil ich die frühere Methode verwendet habe und wollte, dass sie auf derselben Figur dargestellt werden. Ihre Frage war also eigentlich meine Antwort.

Steven
quelle