In den vorhergehenden beiden Artikeln zum Jupyter Notebook ging es um die Ersteinrichtung und die Erstellung eines Kreisdiagramms. Im dritten Teil dieser Artikel-Serie wollen wir uns dem Liniendiagramm zuwenden.
Inhaltlich knüpfe ich an das vorhergehende Kreisdiagramm-Tutorial an. Es geht wieder um Politik, und zwar um die Darstellung der Stimmen (in Prozent), die die Grünen seit 1980 bei den Landtagswahlen in Baden-Württemberg erhalten haben.
Startet Euren Jupyter-Server und beginnt mit einem neuen Python3-Notebook. Dazu klickt Ihr oben rechts auf “New” und wählt “Python 3” aus.
Zunächst muss wieder matplotlib importiert werden:
import matplotlib.pyplot as plt
Nun legen wir die Liste gruene mit den Wahlergebnissen der Grünen an:
gruene = [5.3, 8.0, 7.9, 9.5, 12.1, 7.7, 11.7, 24.2, 30.3]
Sinnvoll wäre auch die Definition der Wahljahre, damit wir die Wahlergebnisse zuordnen können:
years = [1980, 1984, 1988, 1992, 1996, 2001, 2006, 2011, 2016]
Unser Diagramm soll eine Überschrift sowie Beschriftungen für die X- und die Y-Achse erhalten:
plt.title("Landtagswahlen Baden-Württemberg 1980-2016", size="x-large")
plt.ylabel("Stimmen in %", size="x-large")
plt.xlabel("Jahr", size="x-large")
Jetzt erzeugen wir das Diagramm:
plt.plot(years, gruene, "*-", markersize=6, linewidth=1, color='g', label="Grüne")
Die Option “r*-” kennzeichnet die Markierungen und das Vorhandensein einer Linie. Die Größe der Marker wird mit markersize
, die Linienstärke mit linewidth
und die Linienfarbe mit color
bestimmt. Damit wir wissen, um welche Partei es sich handelt dürfen wir auch ein label
nicht vergessen.
Als nächstes legen wir fest, wo die Legende stehen soll, wobei mit loc
die entsprechenden x- und y-Werte angegeben werden können.
plt.legend(loc=(0.1, 0.3))
Und schließlich soll uns das Diagramm auch angezeigt werden:
plt.show()
Nach der Ausführung von Shift
+ Return
sollte das Diagramm erscheinen. Das Ergebnis sieht schon recht passabel aus. Wenn Ihr die X-Achse betrachtet, werdet Ihr aber feststellen, dass die Beschriftung nicht optimal ist. Denn anstatt unserer Vorgabe in years
, sind die Jahreszahlen in Fünf-Jahres-Schritten gleichmäßig auf der X-Achse angeordnet.
Standardmäßig nimmt nämlich Matplotlib die Skalierung der X-Achse vor. Möchte man hingegen eine eigene statische Beschriftung nutzen, kann man auf die axes-Methoden eines Subplot-Objekts zugreifen. Diese Zugriffsmöglichkeit erhält man durch den Aufruf von plt.subplots
. Fügt deswegen nach
gruene = [5.3, 8.0, ...]
folgene Zeile hinzu:
fig, ax = plt.subplots()
In der Zeile
plt.plot(years, gruene, ...
solltet Ihr zudem years
entfernen.
Und vor
plt.show()
müsst Ihr abschließend noch folgendes einfügen:
ax.set_xticks(range(len(years)))
ax.set_xticklabels(years, rotation='vertical')
Wir Ihr Euch vermutlich schon denken könnt, wird mit .set_xticks()
die Position auf der X-Achse bestimmt. Und mit set_xticklabels
werden die Jahreszahlen hinzugefügt. Darüber hinaus übernimmt rotation
die Drehung der Jahreszahlen, so dass sichergestellt ist, dass es keine Überschneidungen gibt.
Der komplette Code sieht nun folgendermaßen aus:
gruene = [5.3, 8.0, 7.9, 9.5, 12.1, 7.7, 11.7, 24.2, 30.3]
fig, ax = plt.subplots()
years = [1980, 1984, 1988, 1992, 1996, 2001, 2006, 2011, 2016]
plt.title("Landtagswahlen Baden-Württemberg 1980-2016", size="x-large")
plt.ylabel("Stimmen in %", size="x-large")
plt.xlabel("Jahr", size="x-large")
plt.plot(gruene, "r*-", markersize=6, linewidth=1, color='g', label="Grüne")
plt.legend(loc=(0.1, 0.3))
ax.set_xticks(range(len(years)))
ax.set_xticklabels(years, rotation='vertical')
plt.show()
Damit sieht das Diagramm schon viel besser aus. Aber wir sind noch nicht fertig. Denn nun stellt sich die Frage: Wie kann ich eine weitere Linie hinzufügen? Die Antwort ist einfach. Nach dem Aufstieg der Grünen, demonstriere ich es am Niedergang der CDU.
Fügen wir zunächst nach den Ergebnissen der Grünen die Wahlergebnisse der CDU hinzu:
cdu = [53.4, 51.9, 49.0, 39.6, 41.3, 44.8, 44.2, 39.0, 27.0]
Als nächstes müssen diese Werte auch dargestellt werden:
plt.plot(cdu, "r*-", markersize=6, linewidth=1, color='black', label='CDU')
Und mehr ist nicht zu tun. Nach der Ausführung von Shift
+ Return
bietet sich Euch folgendes Bild:
Zum Schluss noch ein Hinweis: In vielen Beispielen, die Ihr im Internet findet, wird keine Python-Liste verwendet. Vielmehr begegnet Euch ein np.array
. Übertragen auf unser Diagramm würde anstelle unserer Liste also folgendes stehen:
gruene = np.array([5.3, 8.0, 7.9, 9.5, 12.1, 7.7, 11.7, 24.2, 30.3])
Dabei handelt es sich um eine Array-Datenstruktur, die von der Bibliothek numpy
bereitgestellt wird. Sie gilt als effizienter, weswegen Ihr häufig der Vorzug gegeben wird. Wenn Ihr numpy
nutzen möchtet, dürft Ihr die entsprechende Importanweisung nicht vergessen:
import numpy as np
Am Ergebnis ändert sich nichts. Es sei also Euch die Wahl der Datenstruktur überlassen. Der Code steht übrigens als GithubGist zur Verfügung.
Weiterführende Links
- Jupyter Notebook einrichten
- Jupyter Notebook – Kreisdiagramm erstellen
- Jupyter Notebook – CSV-Datei & Liniendiagramm
- matplotlib manual
Zuletzt aktualisiert am 11. Juli 2022