Nach den Tutorials zum Kreisdiagramm und dem Liniendiagramm fehlt nun noch das Balkendiagramm. Dieser Typus wird insbesondere gerne für Wahlergebnisse verwendet. Und da aktuell in Frankreich die Präsidentschaftswahlen stattfinden, bietet es sich an, das (vorläufige) Ergebnis zu diesem Ereignis – mithilfe von Python 3 und Matplotlib – grafisch darzustellen. Dabei kann teilweise auf den Code der anderen Beispiele zurückgegriffen werden, so dass ich insofern nicht im Detail darauf eingehen werde.
Zunächst müssen die erforderlichen Bibliotheken importiert werden:
import matplotlib.pyplot as plt
import numpy as np
Auch in diesem Beispiel soll wieder ein Subplot genutzt werden:
fig, ax = plt.subplots()
Nun definieren wir die Kandidaten, die dazugehörigen Werte und die Farben der Balken (die den Farben der Parteien bzw. der Bewegung entsprechen sollen).
candidats = ('Marine Le Pen', 'Emmanuel Macron', 'François Fillon', 'Benoît Hamon', 'Jean-Luc Mélenchon')
voter = [21.7,23.9,20,6.3,19.2]
y_pos = np.arange(len(candidats))
couleur = ['#000000', '#dbb243', '#2e42d3', '#e54fe3', '#f23434']
Außerdem soll die Grafik einen Titel und Beschriftungen für die X- und die Y-Achse haben.
plt.title('Election presidentielle 2017')
plt.ylabel('Vote en %')
plt.xlabel("Candidats")
Auf der Basis der bisherigen Angaben muss die Grafik auch erstellt werden:
plt.bar(y_pos, voter, align='center', alpha=0.6, color=couleur)
Dabei wird mit
alpha = 0.6
die Deckkraft der Farben der Balken festgelegt.
Die Werte (Kandidaten) für die X-Achse sollten ebenfalls angezeigt und ausgerichtet werden:
ax.set_xticks(range(len(candidats)))
ax.set_xticklabels(candidats, rotation='vertical')
Und mit
plt.show()
wird die Grafik schließlich auch dargestellt. Darüber hinaus würde die Zeile
plt.savefig('election_presidentielle.png')
dazu führen, dass das Balkendiagramm als PNG-Datei gespeichert wird.
Balkenbeschriftung hinzufügen
Es wäre schön, wenn oberhalb der Balken die Prozentzahlen stehen würden. Dies lässt sich mithilfe einer Funktion erreichen, die ich der Dokumentation zu Matplotlib entnommen habe:
def autolabel(rects):
# attach some text labels
for rect in rects:
height = rect.get_height()
ax.text(rect.get_x() + rect.get_width()/2., height + 1,
'%.1f' % float(height),
ha='center', va='bottom')
autolabel(c_rects)
Aus der Zeile
plt.bar(y_pos, voter, align='center', alpha=0.6, color=couleur)
wird dann dementsprechend:
c_rects = plt.bar(y_pos, voter, align='center', alpha=0.6, color=couleur)
Es kann hierbei passieren, dass eine Balkenbeschriftung außerhalb der oberen Grafikbegrenzung liegt. In diesem Fall könnte man noch die Höhe der Y-Achse beispielsweise mit plt.ylim(0, 30)
anpassen.
Wie üblich gibt es den kompletten Code zum Download bei Github.