Balkendiagramm zur Bundestagswahl mit Python und bokeh erstellen

Die Bibliothek Bokeh hatte ich bereits in einem älteren Artikel kurz vorgestellt. Seinerzeit ging es um die Darstellung der Anzahl der Corona-Infizierten in Kiel als Liniendiagramm. In diesem Tutorial werfen wir hingegen einen Blick auf Balkendiagramme, genauer gesagt, auf die Visualisierung der Stimmen (in Prozent), die die Parteien bei der Bundestagswahl 2021 erhalten haben.

Voraussetzung ist, dass bokeh auf Eurem System installiert ist:

$ pip install bokeh  # Windows
$ pip3 install bokeh # Linux, macOS

Den Anfang machen die Importanweisungen:

from bokeh.plotting import ColumnDataSource
from bokeh.plotting import figure
from bokeh.plotting import show
from bokeh.plotting import output_file
from bokeh.transform import factor_cmap

Falls Ihr den ersten Blogbeitrag zu bokeh gelesen habt, werdet Ihr wissen, dass für die Festlegung der Datenquelle die Funktion ColumnDataSource benötigt wird. Die Funktion figure stellt die Kernkomponente für die Erzeugung der Grafik bereit. So werden hierüber verschiedene Elemente für die Visualisierung bereitgestellt. Mit show wird die Grafik (im Browser) angezeigt und über output_file die Datei bzw. der Dateiname definiert. Während man sich bei den übrigen Importen ungefähr denken kann, wofür sie notwendig sind, erschließt sich dies bei factor_cmap nicht ohne Weiteres. Diese Funktion ermöglicht die Zuordnung von Farben zu Werten (hier die Parteien).

Als nächstes legen wir den Dateinamen fest:

output_file("bundestagswahl_2021.html")

Es folgen die Werte (Parteien, Stimmen) sowie die zu verwendenden Farben. Außerdem wird die Datenquelle definiert.

german_parties = ["Union", "SPD", "AfD", "FDP", "Die Linke", "Grüne", "Sonstige"]
counts = [24.1, 25.7, 10.3, 11.5, 4.9, 14.8, 8.7]
palette = ["#615747", "#EC5F52", "#73C0E9", "#ECBF46", "#AC65AB", "#7CC35F", "#D4D4CA"]

source = ColumnDataSource(data=dict(german_parties=german_parties, counts=counts))

Dann kommen wir zum Code für die Erzeugung des Balkendiagramms (vbar). Mit show(plt) wird zum Schluss die Grafik angezeigt.

plt = figure(
    x_range=german_parties,
    width=800,
    height=400,
    toolbar_location=None,
    title="Bundestagswahl 2021",
)
    plt.vbar(
    x="german_parties",
    top="counts",
    width=0.9,
    source=source,
    legend_field="counts",
    line_color="white",
    fill_color=factor_cmap("german_parties", palette=palette, factors=german_parties),
)

plt.xgrid.grid_line_color = None
plt.y_range.start = 0
plt.y_range.end = 40
plt.legend.orientation = "horizontal"
plt.legend.location = "top_center"

show(plt)

Es sollte sich der Browser öffnen und folgendes Balkendiagramm erscheinen:

Balkendiagramm zur Bundestagswahl 2021