Création de graphiques à points de dispersion avec légendes

Beginner

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

Introduction

Les graphiques à points de dispersion sont utilisés pour visualiser la relation entre deux variables. Un graphique à points de dispersion avec une légende est utile lorsqu'il y a plusieurs groupes dans les données et que l'on veut les distinguer dans le graphique. Dans ce laboratoire, nous allons apprendre à créer des graphiques à points de dispersion avec des légendes en Python à l'aide de la bibliothèque Matplotlib.

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 Carnet de notes pour accéder au carnet Jupyter Notebook pour pratiquer.

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

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

Importation des bibliothèques requises

Nous commençons par importer les bibliothèques nécessaires, y compris NumPy et Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Création d'un graphique à points de dispersion avec plusieurs groupes

Nous pouvons créer un graphique à points de dispersion avec plusieurs groupes en parcourant chaque groupe et en créant un graphique à points de dispersion pour ce groupe. Nous spécifions la couleur, la taille et la transparence des marqueurs pour chaque groupe en utilisant respectivement les paramètres c, s et alpha. Nous définissons également le paramètre label sur le nom du groupe, qui sera utilisé dans la légende.

fig, ax = plt.subplots()
for color in ['tab:blue', 'tab:orange', 'tab:green']:
    n = 750
    x, y = np.random.rand(2, n)
    scale = 200.0 * np.random.rand(n)
    ax.scatter(x, y, c=color, s=scale, label=color,
               alpha=0.3, edgecolors='none')

ax.legend()
ax.grid(True)

plt.show()

Création automatique de légende

Nous pouvons également utiliser la méthode PathCollection.legend_elements pour créer automatiquement une légende pour un graphique à points de dispersion. Cette méthode tentera de déterminer un nombre utile d'entrées de légende à afficher et renverra un tuple de poignées et d'étiquettes.

N = 45
x, y = np.random.rand(2, N)
c = np.random.randint(1, 5, size=N)
s = np.random.randint(10, 220, size=N)

fig, ax = plt.subplots()

scatter = ax.scatter(x, y, c=c, s=s)

## produire une légende avec les couleurs uniques du graphique à points de dispersion
legend1 = ax.legend(*scatter.legend_elements(),
                    loc="lower left", title="Classes")
ax.add_artist(legend1)

## produire une légende avec une tranche d'échelles du graphique à points de dispersion
handles, labels = scatter.legend_elements(prop="sizes", alpha=0.6)
legend2 = ax.legend(handles, labels, loc="upper right", title="Sizes")

plt.show()

Personnalisation des éléments de la légende

Nous pouvons personnaliser davantage les éléments de la légende en utilisant des arguments supplémentaires dans la méthode PathCollection.legend_elements. Par exemple, nous pouvons spécifier le nombre d'entrées de légende à créer et comment elles devraient être étiquetées.

volume = np.random.rayleigh(27, size=40)
amount = np.random.poisson(10, size=40)
ranking = np.random.normal(size=40)
price = np.random.uniform(1, 10, size=40)

fig, ax = plt.subplots()

## Étant donné que le prix est beaucoup trop petit lorsqu'il est utilisé comme taille pour ``s``,
## nous le normalisons à des tailles de points utiles, s=0.3*(prix*3)**2
scatter = ax.scatter(volume, amount, c=ranking, s=0.3*(price*3)**2,
                     vmin=-3, vmax=3, cmap="Spectral")

## Créer une légende pour le classement (couleurs). Même s'il y a 40 classements différents,
## nous ne voulons montrer que 5 d'entre eux dans la légende.
legend1 = ax.legend(*scatter.legend_elements(num=5),
                    loc="upper left", title="Ranking")
ax.add_artist(legend1)

## Créer une légende pour le prix (tailles). Étant donné que nous voulons montrer les prix
## en dollars, nous utilisons l'argument *func* pour fournir l'inverse de la fonction
## utilisée pour calculer les tailles ci-dessus. Le *fmt* assure d'afficher le prix
## en dollars. Notez comment nous visons 5 éléments ici, mais obtenons seulement 4 dans la
## légende créée en raison des prix arrondis automatiques qui sont choisis pour nous.
kw = dict(prop="sizes", num=5, color=scatter.cmap(0.7), fmt="$ {x:.2f}",
          func=lambda s: np.sqrt(s/.3)/3)
legend2 = ax.legend(*scatter.legend_elements(**kw),
                    loc="lower right", title="Price")

plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à créer des graphiques à points de dispersion avec légendes en Python en utilisant la bibliothèque Matplotlib. Nous avons créé des graphiques à points de dispersion avec plusieurs groupes et la création automatique de légendes. Nous avons également personnalisé les éléments de la légende en utilisant la méthode PathCollection.legend_elements. Les graphiques à points de dispersion avec légendes sont utiles pour visualiser la relation entre deux variables avec plusieurs groupes.