Introduction
Dans ce laboratoire, vous allez apprendre à utiliser Matplotlib, une bibliothèque Python pour créer des visualisations, pour créer une figure et annoter son anatomie. Vous allez apprendre à créer une figure, tracer des données, définir les limites des axes, ajouter des étiquettes et des titres, et annoter la figure avec du texte et des marqueurs.
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'étude 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.
Importation des bibliothèques et configuration des données
Tout d'abord, nous devons importer les bibliothèques nécessaires et configurer certaines données pour le tracé. Dans cet exemple, nous allons tracer trois ondes sinusoïdales avec du bruit aléatoire ajouté.
import matplotlib.pyplot as plt
import numpy as np
## Configuration des données
np.random.seed(19680801)
X = np.linspace(0.5, 3.5, 100)
Y1 = 3+np.cos(X)
Y2 = 1+np.cos(1+X/0.75)/2
Y3 = np.random.uniform(Y1, Y2, len(X))
Création de la figure et configuration des axes
Ensuite, nous allons créer une figure et configurer les axes. Nous utiliserons la méthode add_axes() pour créer un nouvel ensemble d'axes à l'intérieur de la figure. Nous définirons également les limites des axes x et y et ajouterons des lignes de grille.
## Création de la figure et des axes
fig = plt.figure(figsize=(7.5, 7.5))
ax = fig.add_axes([0.2, 0.17, 0.68, 0.7], aspect=1)
## Définition des limites et des lignes de grille
ax.set_xlim(0, 4)
ax.set_ylim(0, 4)
ax.grid(linestyle="--", linewidth=0.5, color='.25', zorder=-10)
Tracer les données
Maintenant, nous allons tracer nos données sur les axes que nous venons de créer. Nous utiliserons la méthode plot() pour tracer les trois ondes sinusoïdales avec différentes couleurs et largeurs de ligne.
## Tracer les données
ax.plot(X, Y1, c='C0', lw=2.5, label="Blue signal", zorder=10)
ax.plot(X, Y2, c='C1', lw=2.5, label="Orange signal")
ax.plot(X[::3], Y3[::3], linewidth=0, markersize=9,
marker='s', markerfacecolor='none', markeredgecolor='C4',
markeredgewidth=2.5)
Ajouter des étiquettes et un titre
Nous allons maintenant ajouter des étiquettes aux axes x et y, et un titre à la figure en utilisant les méthodes set_xlabel(), set_ylabel() et set_title().
## Ajouter des étiquettes et un titre
ax.set_xlabel("x Axis label", fontsize=14)
ax.set_ylabel("y Axis label", fontsize=14)
ax.set_title("Anatomy of a figure", fontsize=20, verticalalignment='bottom')
Ajouter une légende
Nous allons ajouter une légende à la figure en utilisant la méthode legend(). Nous spécifierons également la position et la taille de police de la légende.
## Ajouter une légende
ax.legend(loc="upper right", fontsize=14)
Annoter la figure
Enfin, nous allons annoter la figure pour montrer les noms de divers éléments de Matplotlib en utilisant les méthodes text() et Circle(). Nous utiliserons également la méthode withStroke() pour ajouter un contour blanc au texte et aux marqueurs pour une meilleure visibilité.
## Annoter la figure
from matplotlib.patches import Circle
from matplotlib.patheffects import withStroke
royal_blue = [0, 20/256, 82/256]
def annotate(x, y, text, code):
## Marqueur en forme de cercle
c = Circle((x, y), radius=0.15, clip_on=False, zorder=10, linewidth=2.5,
edgecolor=royal_blue + [0.6], facecolor='none',
path_effects=[withStroke(linewidth=7, foreground='white')])
ax.add_artist(c)
## Utiliser path_effects comme arrière-plan pour les textes
## Dessiner les path_effects et le texte coloré séparément pour que les
## path_effects ne puissent pas découper d'autres textes
for path_effects in [[withStroke(linewidth=7, foreground='white')], []]:
color = 'white' if path_effects else royal_blue
ax.text(x, y-0.2, text, zorder=100,
ha='center', va='top', weight='bold', color=color,
style='italic', fontfamily='Courier New',
path_effects=path_effects)
color = 'white' if path_effects else 'black'
ax.text(x, y-0.33, code, zorder=100,
ha='center', va='top', weight='normal', color=color,
fontfamily='monospace', fontsize='medium',
path_effects=path_effects)
annotate(3.5, -0.13, "Minor tick label", "ax.xaxis.set_minor_formatter")
annotate(-0.03, 1.0, "Major tick", "ax.yaxis.set_major_locator")
annotate(0.00, 3.75, "Minor tick", "ax.yaxis.set_minor_locator")
annotate(-0.15, 3.00, "Major tick label", "ax.yaxis.set_major_formatter")
annotate(1.68, -0.39, "xlabel", "ax.set_xlabel")
annotate(-0.38, 1.67, "ylabel", "ax.set_ylabel")
annotate(1.52, 4.15, "Title", "ax.set_title")
annotate(1.75, 2.80, "Line", "ax.plot")
annotate(2.25, 1.54, "Markers", "ax.scatter")
annotate(3.00, 3.00, "Grid", "ax.grid")
annotate(3.60, 3.58, "Legend", "ax.legend")
annotate(2.5, 0.55, "Axes", "fig.subplots")
annotate(4, 4.5, "Figure", "plt.figure")
annotate(0.65, 0.01, "x Axis", "ax.xaxis")
annotate(0, 0.36, "y Axis", "ax.yaxis")
annotate(4.0, 0.7, "Spine", "ax.spines")
Sommaire
Dans ce laboratoire, vous avez appris à utiliser Matplotlib pour créer une figure et annoter son anatomie. Vous avez appris à créer une figure, tracer des données, définir les limites des axes, ajouter des étiquettes et des titres, et annoter la figure avec du texte et des marqueurs. En suivant les étapes de ce laboratoire, vous devriez maintenant avoir une bonne compréhension de la manière d'utiliser Matplotlib pour créer et annoter des figures en Python.