Créer des sous-graphiques animés 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

Cette démonstration de laboratoire étape par étape montre comment créer une animation avec plusieurs sous-graphiques à l'aide de Matplotlib en Python. L'exemple montre comment animer un cercle et une courbe sinusoidale sur deux sous-graphiques différents.

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

Importation des bibliothèques

La première étape consiste à importer les bibliothèques requises, y compris Matplotlib, NumPy et le module d'animation de Matplotlib.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
from matplotlib.patches import ConnectionPatch

Créer la figure et les sous-graphiques

La deuxième étape consiste à créer la figure et les sous-graphiques qui seront utilisés pour l'animation. Dans cet exemple, nous créons deux sous-graphiques côte à côte avec des rapports d'aspect différents. Le sous-graphique de gauche est un cercle unitaire, et le sous-graphique de droite est un graphique vide qui sera utilisé pour animer une courbe sinusoidale.

fig, (axl, axr) = plt.subplots(
    ncols=2,
    sharey=True,
    figsize=(6, 2),
    gridspec_kw=dict(width_ratios=[1, 3], wspace=0),
)
axl.set_aspect(1)
axr.set_box_aspect(1 / 3)
axr.yaxis.set_visible(False)
axr.xaxis.set_ticks([0, np.pi, 2 * np.pi], ["0", r"$\pi$", r"$2\pi$"])

Dessiner le cercle et le point initial

La troisième étape consiste à dessiner le cercle et le point initial sur le sous-graphique de gauche. Nous créons un tableau d'angles pour générer le cercle, puis traçons le sinus et le cosinus de chaque angle. Nous traçons également un seul point à l'origine.

x = np.linspace(0, 2 * np.pi, 50)
axl.plot(np.cos(x), np.sin(x), "k", lw=0.3)
point, = axl.plot(0, 0, "o")

Dessiner la courbe sinusoidale

La quatrième étape consiste à dessiner la courbe sinusoidale sur le sous-graphique de droite. Nous créons un tableau d'angles, puis traçons le sinus de chaque angle. Nous enregistrons également l'objet de tracé sine, que nous mettrons à jour plus tard dans l'animation.

sine, = axr.plot(x, np.sin(x))

Dessiner la ligne de connexion

La cinquième étape consiste à dessiner une ligne pointillée reliant les deux sous-graphiques. Nous créons un objet ConnectionPatch qui relie l'origine du sous-graphique de gauche au bord droit du sous-graphique de droite. Nous enregistrons également l'objet de patch con, que nous mettrons à jour plus tard dans l'animation.

con = ConnectionPatch(
    (1, 0),
    (0, 0),
    "data",
    "data",
    axesA=axl,
    axesB=axr,
    color="C0",
    ls="dotted",
)
fig.add_artist(con)

Définir la fonction d'animation

La sixième étape consiste à définir la fonction d'animation. Cette fonction sera appelée pour chaque trame de l'animation et mettra à jour la position du point sur le sous-graphique de gauche, la position et les données de la courbe sinusoidale sur le sous-graphique de droite, et la position du patch de connexion.

def animate(i):
    x = np.linspace(0, i, int(i * 25 / np.pi))
    sine.set_data(x, np.sin(x))
    x, y = np.cos(i), np.sin(i)
    point.set_data([x], [y])
    con.xy1 = x, y
    con.xy2 = i, y
    return point, sine, con

Créer l'animation

La septième étape consiste à créer l'objet d'animation à l'aide de la fonction FuncAnimation. Nous passons l'objet de figure, la fonction d'animation, l'intervalle entre les trames en millisecondes, le nombre de trames et un délai avant de répéter l'animation.

ani = animation.FuncAnimation(
    fig,
    animate,
    interval=50,
    blit=False,  ## blitting ne peut pas être utilisé avec les artistes de Figure
    frames=x,
    repeat_delay=100,
)

Afficher l'animation

La dernière étape consiste à afficher l'animation à l'aide de la fonction show du module pyplot.

plt.show()

Sommaire

Ce laboratoire étape par étape a démontré comment créer une animation avec plusieurs sous-graphiques à l'aide de Matplotlib en Python. L'exemple a montré comment animer un cercle et une courbe sinusoidale sur deux sous-graphiques différents. Les étapes ont inclus l'importation des bibliothèques, la création de la figure et des sous-graphiques, le tracé du cercle et du point initial, le tracé de la courbe sinusoidale, le tracé de la ligne de connexion, la définition de la fonction d'animation, la création de l'objet d'animation et l'affichage de l'animation.