Création de tracés animés avec Matplotlib

Beginner

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

Introduction

Matplotlib est une bibliothèque de visualisation de données utilisée pour créer des visualisations statiques, animées et interactives en Python. Dans ce laboratoire, nous allons apprendre à créer un tracé animé à l'aide de Matplotlib. Nous utiliserons la classe FuncAnimation pour créer une animation d'une onde sinusoïdale en décroissance.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez sur le coin supérieur gauche pour basculer vers l'onglet Carnet d'adresses pour accéder au carnet Jupyter pour la pratique.

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

Tout d'abord, nous devons importer les bibliothèques nécessaires. Nous utiliserons Matplotlib et NumPy dans ce laboratoire.

import itertools

import matplotlib.pyplot as plt
import numpy as np

import matplotlib.animation as animation

Créer la fonction génératrice de données

Ensuite, nous devons créer une fonction pour générer les données de l'animation. La fonction produira une onde sinusoïdale qui décroît au fil du temps. Nous utiliserons la fonction itertools.count() pour générer une séquence infinie de nombres. Nous utiliserons ces nombres pour calculer les valeurs de l'onde sinusoïdale.

def data_gen():
    for cnt in itertools.count():
        t = cnt / 10
        yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)

Préparer le tracé

Maintenant, nous devons préparer le tracé. Nous allons créer une figure et un objet d'axes à l'aide de la fonction subplots() de Matplotlib. Nous allons également créer un objet de ligne pour représenter l'onde sinusoïdale.

fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.grid()
xdata, ydata = [], []

Définir la fonction d'initialisation

Nous devons définir une fonction d'initialisation qui définira l'état initial du tracé. Dans cette fonction, nous définirons les limites de l'axe des y et effacerons les données de l'objet de ligne.

def init():
    ax.set_ylim(-1.1, 1.1)
    ax.set_xlim(0, 1)
    del xdata[:]
    del ydata[:]
    line.set_data(xdata, ydata)
    return line,

Définir la fonction d'animation

Maintenant, nous devons définir la fonction qui mettra à jour le tracé pour chaque trame de l'animation. Cette fonction prendra les données générées par la fonction data_gen() et mettra à jour le tracé avec les nouvelles données. Nous mettrons également à jour les limites de l'axe des x au fur et à mesure que l'animation progresse.

def run(data):
    ## update the data
    t, y = data
    xdata.append(t)
    ydata.append(y)
    xmin, xmax = ax.get_xlim()

    if t >= xmax:
        ax.set_xlim(xmin, 2*xmax)
        ax.figure.canvas.draw()
    line.set_data(xdata, ydata)

    return line,

Créer l'animation

Enfin, nous pouvons créer l'animation à l'aide de la classe FuncAnimation. Nous passerons les paramètres fig, run, data_gen, init_func et interval pour créer l'animation. Nous définirons également le paramètre save_count sur 100 pour vous assurer que seules les 100 dernières trames sont enregistrées.

ani = animation.FuncAnimation(fig, run, data_gen, interval=100, init_func=init,
                              save_count=100)

Afficher le tracé

Nous pouvons maintenant afficher le tracé à l'aide de la fonction show() de Matplotlib.

plt.show()

Récapitulatif

Dans ce laboratoire, nous avons appris à créer un tracé animé à l'aide de Matplotlib. Nous avons utilisé la classe FuncAnimation pour créer une animation d'une onde sinusoïdale en décroissance. Nous avons également appris à configurer un tracé, à définir une fonction génératrice de données, à définir une fonction d'initialisation, à définir une fonction d'animation et à créer l'animation.