Einführung
In diesem Lab werden wir lernen, wie man mithilfe der Matplotlib-Bibliothek in Python einen Hut-Graphen erstellt. Ein Hut-Graph ist eine Variante eines gestapelten Balkendiagramms, wobei jeder Balken die Form eines Hutes hat. Wir werden einen Datensatz von Punkten nach Anzahl von Spielen und Spielern verwenden, um den Graphen zu erstellen.
VM-Tipps
Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Bibliotheken importieren
In diesem Schritt werden wir die erforderlichen Bibliotheken für das Erstellen des Hut-Graphen importieren.
import matplotlib.pyplot as plt
import numpy as np
Die Funktion für den Hut-Graphen definieren
In diesem Schritt werden wir eine Funktion definieren, die den Hut-Graphen erstellt. Die Funktion nimmt die folgenden Parameter entgegen:
- ax: Die Achsen, in die geplottet werden soll.
- xlabels: Die Kategorie-Namen, die auf der x-Achse angezeigt werden sollen.
- values: Die Datenwerte. Die Zeilen sind die Gruppen, und die Spalten sind die Kategorien.
- group_labels: Die Gruppennamen, die in der Legende angezeigt werden.
def hat_graph(ax, xlabels, values, group_labels):
"""
Erstellt einen Hut-Graphen.
Parameter
----------
ax : matplotlib.axes.Axes
Die Achsen, in die geplottet werden soll.
xlabels : Liste von str
Die Kategorie-Namen, die auf der x-Achse angezeigt werden sollen.
values : (M, N) array-ähnlich
Die Datenwerte.
Die Zeilen sind die Gruppen (len(group_labels) == M).
Die Spalten sind die Kategorien (len(xlabels) == N).
group_labels : Liste von str
Die Gruppennamen, die in der Legende angezeigt werden.
"""
def label_bars(heights, rects):
"""Fügt eine Textbeschriftung über jeder Bar hinzu."""
for height, rect in zip(heights, rects):
ax.annotate(f'{height}',
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0, 4), ## 4 Punkte vertikaler Abstand.
textcoords='offset points',
ha='center', va='bottom')
values = np.asarray(values)
x = np.arange(values.shape[1])
ax.set_xticks(x, labels=xlabels)
spacing = 0.3 ## Abstand zwischen den Hut-Gruppen
width = (1 - spacing) / values.shape[0]
heights0 = values[0]
for i, (heights, group_label) in enumerate(zip(values, group_labels)):
style = {'fill': False} if i == 0 else {'edgecolor': 'black'}
rects = ax.bar(x - spacing/2 + i * width, heights - heights0,
width, bottom=heights0, label=group_label, **style)
label_bars(heights, rects)
Daten vorbereiten
In diesem Schritt werden wir die Labels und ein Numpy-Array initialisieren. Wir werden sicherstellen, dass wir N Labels von N Anzahl von Werten im Array haben.
## initialise labels and a numpy array make sure you have
## N labels of N number of values in the array
xlabels = ['I', 'II', 'III', 'IV', 'V']
playerA = np.array([5, 15, 22, 20, 25])
playerB = np.array([25, 32, 34, 30, 27])
Hut-Graphen erstellen
In diesem Schritt werden wir den Hut-Graphen mit den in dem vorherigen Schritt vorbereiteten Daten und der hat_graph-Funktion erstellen.
fig, ax = plt.subplots()
hat_graph(ax, xlabels, [playerA, playerB], ['Player A', 'Player B'])
## Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_xlabel('Spiele')
ax.set_ylabel('Punkte')
ax.set_ylim(0, 60)
ax.set_title('Punkte nach Anzahl von Spielen und Spielern')
ax.legend()
fig.tight_layout()
plt.show()
Vollständiger Code
Hier ist der vollständige Code in Python, um den Hut-Graphen zu erstellen.
import matplotlib.pyplot as plt
import numpy as np
def hat_graph(ax, xlabels, values, group_labels):
"""
Erstellt einen Hut-Graphen.
Parameter
----------
ax : matplotlib.axes.Axes
Die Achsen, in die geplottet werden soll.
xlabels : Liste von str
Die Kategorie-Namen, die auf der x-Achse angezeigt werden sollen.
values : (M, N) array-ähnlich
Die Datenwerte.
Die Zeilen sind die Gruppen (len(group_labels) == M).
Die Spalten sind die Kategorien (len(xlabels) == N).
group_labels : Liste von str
Die Gruppennamen, die in der Legende angezeigt werden.
"""
def label_bars(heights, rects):
"""Fügt eine Textbeschriftung über jeder Bar hinzu."""
for height, rect in zip(heights, rects):
ax.annotate(f'{height}',
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0, 4), ## 4 Punkte vertikaler Abstand.
textcoords='offset points',
ha='center', va='bottom')
values = np.asarray(values)
x = np.arange(values.shape[1])
ax.set_xticks(x, labels=xlabels)
spacing = 0.3 ## Abstand zwischen den Hut-Gruppen
width = (1 - spacing) / values.shape[0]
heights0 = values[0]
for i, (heights, group_label) in enumerate(zip(values, group_labels)):
style = {'fill': False} if i == 0 else {'edgecolor': 'black'}
rects = ax.bar(x - spacing/2 + i * width, heights - heights0,
width, bottom=heights0, label=group_label, **style)
label_bars(heights, rects)
## initialise labels and a numpy array make sure you have
## N labels of N number of values in the array
xlabels = ['I', 'II', 'III', 'IV', 'V']
playerA = np.array([5, 15, 22, 20, 25])
playerB = np.array([25, 32, 34, 30, 27])
fig, ax = plt.subplots()
hat_graph(ax, xlabels, [playerA, playerB], ['Player A', 'Player B'])
## Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_xlabel('Spiele')
ax.set_ylabel('Punkte')
ax.set_ylim(0, 60)
ax.set_title('Punkte nach Anzahl von Spielen und Spielern')
ax.legend()
fig.tight_layout()
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man in Python einen Hut-Graphen mit der Matplotlib-Bibliothek erstellt. Wir haben eine Funktion definiert, die den Hut-Graphen erstellt, die Daten vorbereitet und den Graphen mit der hat_graph-Funktion erstellt. Der Hut-Graphen ist eine Variante eines gestapelten Balkendiagramms, wobei jeder Balken eine Hutform hat. Wir haben einen Datensatz von Punkten nach Anzahl von Spielen und Spielern verwendet, um den Graphen zu erstellen.