Einen Hut-Graphen erstellen

Beginner

This tutorial is from open-source community. Access the source code

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.