Matplotlib Stackplots und Streamgraphs

MatplotlibMatplotlibBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernst du, wie du Matplotlib verwendest, um Stackplots und Streamgraphs zu erstellen. Stackplots sind nützlich, wenn du mehrere Datensätze als vertikal übereinander liegende Bereiche visualisieren möchtest. Streamgraphs sind eine Variation von Stackplots, bei denen die Grundlinie des Diagramms nicht bei Null fixiert ist. Stattdessen wird die Grundlinie "gewackelt", sodass die Bereiche des Diagramms geglättet und ineinander überfließen.

VM-Tipps

Nachdem der VM-Start abgeschlossen ist, klicke in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal musst du 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 du während des Lernens Probleme hast, kannst du Labby gerne fragen. Gib nach der Sitzung Feedback, und wir werden das Problem für dich prompt beheben.

Bibliotheken importieren

Der erste Schritt besteht darin, die erforderlichen Bibliotheken zu importieren, in diesem Fall Matplotlib und NumPy.

import matplotlib.pyplot as plt
import numpy as np

Stackplot erstellen

Der zweite Schritt besteht darin, einen Stackplot mit der Funktion stackplot() zu erstellen. Wir werden Daten aus den Weltbevölkerungsperspektiven der Vereinten Nationen (Revidierte Ausgabe 2019) verwenden, um einen Stackplot der Weltbevölkerung nach Kontinenten von 1950 bis 2018 zu erstellen.

## data from United Nations World Population Prospects (Revision 2019)
## https://population.un.org/wpp/, license: CC BY 3.0 IGO
year = [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2018]
population_by_continent = {
    'africa': [228, 284, 365, 477, 631, 814, 1044, 1275],
    'americas': [340, 425, 519, 619, 727, 840, 943, 1006],
    'asia': [1394, 1686, 2120, 2625, 3202, 3714, 4169, 4560],
    'europe': [220, 253, 276, 295, 310, 303, 294, 293],
    'oceania': [12, 15, 19, 22, 26, 31, 36, 39],
}

fig, ax = plt.subplots()
ax.stackplot(year, population_by_continent.values(),
             labels=population_by_continent.keys(), alpha=0.8)
ax.legend(loc='upper left', reverse=True)
ax.set_title('World population')
ax.set_xlabel('Year')
ax.set_ylabel('Number of people (millions)')

plt.show()

Streamgraph erstellen

Der dritte Schritt besteht darin, einen Streamgraph mit der Funktion stackplot() zu erstellen, wobei der Parameter baseline auf 'wiggle' gesetzt ist. Wir werden eine zufällige Mischung von Gaußverteilungen erstellen und sie als Streamgraph darstellen.

## Fixing random state for reproducibility
np.random.seed(19680801)


def gaussian_mixture(x, n=5):
    """Return a random mixture of *n* Gaussians, evaluated at positions *x*."""
    def add_random_gaussian(a):
        amplitude = 1 / (.1 + np.random.random())
        dx = x[-1] - x[0]
        x0 = (2 * np.random.random() -.5) * dx
        z = 10 / (.1 + np.random.random()) / dx
        a += amplitude * np.exp(-(z * (x - x0))**2)
    a = np.zeros_like(x)
    for j in range(n):
        add_random_gaussian(a)
    return a


x = np.linspace(0, 100, 101)
ys = [gaussian_mixture(x) for _ in range(3)]

fig, ax = plt.subplots()
ax.stackplot(x, ys, baseline='wiggle')
plt.show()

Zusammenfassung

Herzlichen Glückwunsch! Du hast gelernt, wie man Stackplots und Streamgraphs mit Matplotlib erstellt. Stackplots eignen sich gut zur Visualisierung mehrerer Datensätze als vertikal übereinander liegende Bereiche, während Streamgraphs eine Variation von Stackplots sind, bei denen die Grundlinie "gewackelt" wird, sodass die Bereiche des Diagramms geglättet und ineinander überfließen.