Créer des lignes multicolores avec Matplotlib

PythonPythonBeginner
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, nous allons apprendre à créer des lignes multicolores avec Matplotlib. Nous utiliserons la fonction LineCollection pour créer un ensemble de segments de ligne et les colorer individuellement en fonction de leur dérivée. Nous apprendrons également à utiliser une norme de limite pour colorer les segments de ligne.

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 d'adresses pour accéder au carnet Jupyter pour pratiquer.

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

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églerons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) matplotlib(("Matplotlib")) -.-> matplotlib/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) matplotlib/BasicConceptsGroup -.-> matplotlib/importing_matplotlib("Importing Matplotlib") matplotlib/BasicConceptsGroup -.-> matplotlib/figures_axes("Understanding Figures and Axes") python/BasicConceptsGroup -.-> python/booleans("Booleans") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/DataScienceandMachineLearningGroup -.-> python/numerical_computing("Numerical Computing") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("Data Visualization") subgraph Lab Skills matplotlib/importing_matplotlib -.-> lab-48836{{"Créer des lignes multicolores avec Matplotlib"}} matplotlib/figures_axes -.-> lab-48836{{"Créer des lignes multicolores avec Matplotlib"}} python/booleans -.-> lab-48836{{"Créer des lignes multicolores avec Matplotlib"}} python/lists -.-> lab-48836{{"Créer des lignes multicolores avec Matplotlib"}} python/tuples -.-> lab-48836{{"Créer des lignes multicolores avec Matplotlib"}} python/build_in_functions -.-> lab-48836{{"Créer des lignes multicolores avec Matplotlib"}} python/importing_modules -.-> lab-48836{{"Créer des lignes multicolores avec Matplotlib"}} python/numerical_computing -.-> lab-48836{{"Créer des lignes multicolores avec Matplotlib"}} python/data_visualization -.-> lab-48836{{"Créer des lignes multicolores avec Matplotlib"}} end

Importation des bibliothèques

Nous allons commencer par importer les bibliothèques nécessaires pour ce laboratoire. Nous importerons matplotlib.pyplot et numpy.

import matplotlib.pyplot as plt
import numpy as np

Création des données

Nous allons créer un tableau numpy x contenant 500 valeurs régulièrement espacées entre 0 et 3π. Nous allons également créer un autre tableau numpy y contenant le sinus des valeurs de x. Enfin, nous allons créer un tableau numpy dydx contenant la première dérivée de y.

x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.cos(0.5 * (x[:-1] + x[1:]))

Création de segments de ligne

Nous allons créer un ensemble de segments de ligne afin de pouvoir les colorer individuellement. Nous utiliserons la fonction concatenate de numpy pour concaténer deux tableaux points[:-1] et points[1:] le long du deuxième axe. Nous allons ensuite redimensionner le tableau résultant en un tableau N x 1 x 2 afin de pouvoir empiler facilement les points pour obtenir les segments. Le tableau de segments pour la collecte de lignes doit être de forme (numlines) x (points par ligne) x 2 (pour x et y).

points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

Création d'une norme continue

Nous allons créer une norme continue pour mapper les points de données aux couleurs. Nous utiliserons la fonction Normalize de matplotlib.pyplot pour normaliser les valeurs de dydx entre son minimum et son maximum. Nous utiliserons ensuite la fonction LineCollection pour créer un ensemble de segments de ligne et les colorer individuellement en fonction de leur dérivée. Nous utiliserons la fonction set_array pour définir les valeurs utilisées pour la cartographie des couleurs.

norm = plt.Normalize(dydx.min(), dydx.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)

Création d'une barre de couleur

Nous allons créer une barre de couleur pour montrer la correspondance entre les couleurs et les valeurs de dydx. Nous utiliserons la fonction colorbar de matplotlib.pyplot pour créer une barre de couleur.

line = plt.gca().add_collection(lc)
plt.colorbar(line)

Utiliser une norme de limite

Au lieu de cela, nous allons utiliser une norme de limite pour colorer les segments de ligne. Nous allons créer une ListedColormap contenant trois couleurs - rouge, verte et bleue. Nous allons ensuite créer une BoundaryNorm avec des limites -1, -0,5, 0,5 et 1, et la ListedColormap. Nous utiliserons la fonction set_array pour définir les valeurs utilisées pour la cartographie des couleurs.

cmap = ListedColormap(['r', 'g', 'b'])
norm = BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)

Création d'un sous-graphique

Nous allons créer un sous-graphique pour afficher les segments de ligne colorés. Nous utiliserons la fonction subplots de matplotlib.pyplot pour créer une grille de sous-graphiques 2x1, et les paramètres sharex et sharey pour partager les axes x et y entre les sous-graphiques.

fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)
line = axs[0].add_collection(lc)
fig.colorbar(line, ax=axs[0])

Définir les limites des axes

Nous allons définir les limites des axes x et y pour les sous-graphiques.

axs[0].set_xlim(x.min(), x.max())
axs[0].set_ylim(-1.1, 1.1)

Afficher la figure

Nous utiliserons la fonction show de matplotlib.pyplot pour afficher la figure.

plt.show()

Récapitulatif

Dans ce laboratoire, nous avons appris à créer des lignes multicolores dans Matplotlib. Nous avons utilisé la fonction LineCollection pour créer un ensemble de segments de ligne et les colorer individuellement en fonction de leur dérivée. Nous avons également appris à utiliser une norme de limite pour colorer les segments de ligne. Nous avons utilisé la fonction Normalize pour normaliser les valeurs de dydx entre son minimum et son maximum, et la fonction ListedColormap pour créer une carte de couleur avec trois couleurs - rouge, verte et bleue. Nous avons utilisé la fonction BoundaryNorm pour créer une norme de limite avec des limites -1, -0,5, 0,5 et 1, et la ListedColormap. Enfin, nous avons utilisé la fonction subplots pour créer une grille de sous-graphiques 2x1, et les paramètres sharex et sharey pour partager les axes x et y entre les sous-graphiques. Nous avons ensuite affiché la figure à l'aide de la fonction show.