Matplotlib : graphiques empilés et streamgraphs

MatplotlibMatplotlibBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous allez apprendre à utiliser Matplotlib pour créer des graphiques empilés et des streamgraphs. Les graphiques empilés sont utiles lorsque vous voulez visualiser plusieurs jeux de données sous forme de zones empilées verticalement. Les streamgraphs sont une variante des graphiques empilés où la ligne de base du graphique n'est pas fixée à zéro. Au lieu de cela, la ligne de base est "ondulée" de manière à ce que les zones du graphique soient lisses et s'écoulent les unes dans les autres.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.

Importation des bibliothèques

La première étape consiste à importer les bibliothèques nécessaires, qui sont dans ce cas Matplotlib et NumPy.

import matplotlib.pyplot as plt
import numpy as np

Création d'un graphique empilé

La deuxième étape consiste à créer un graphique empilé à l'aide de la fonction stackplot(). Nous utiliserons les données des Perspectives démographiques mondiales de l'ONU (Révision 2019) pour créer un graphique empilé de la population mondiale par continent de 1950 à 2018.

## données des Perspectives démographiques mondiales de l'ONU (Révision 2019)
## https://population.un.org/wpp/, licence : CC BY 3.0 IGO
year = [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2018]
population_by_continent = {
    'afrique': [228, 284, 365, 477, 631, 814, 1044, 1275],
    'amériques': [340, 425, 519, 619, 727, 840, 943, 1006],
    'asie': [1394, 1686, 2120, 2625, 3202, 3714, 4169, 4560],
    'europe': [220, 253, 276, 295, 310, 303, 294, 293],
    'océanie': [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('Population mondiale')
ax.set_xlabel('Année')
ax.set_ylabel('Nombre de personnes (en millions)')

plt.show()

Création d'un streamgraph

La troisième étape consiste à créer un streamgraph à l'aide de la fonction stackplot() en configurant le paramètre baseline sur 'wiggle'. Nous allons créer un mélange aléatoire de Gaussiennes et les représenter sous forme de streamgraph.

## 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()

Sommaire

Félicitations ! Vous avez appris à créer des graphiques empilés et des streamgraphs à l'aide de Matplotlib. Les graphiques empilés sont utiles pour visualiser plusieurs jeux de données sous forme de zones empilées verticalement, tandis que les streamgraphs sont une variante des graphiques empilés où la ligne de base est "ondulée" de manière à ce que les zones du graphique soient lisses et s'écoulent les unes dans les autres.