Jupyter Notebook – Liniendiagramm erstellen

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.

start new Jupyter notebook

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:

Wahlen in BW - Grüne und CDU im Vergleich

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

Zuletzt aktualisiert am 11. Juli 2022