Creando tramas animadas con Matplotlib

Beginner

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

Introducción

Matplotlib es una biblioteca de visualización de datos que se utiliza para crear visualizaciones estáticas, animadas e interactivas en Python. En este laboratorio, aprenderemos a crear una trama animada utilizando Matplotlib. Utilizaremos la clase FuncAnimation para crear una animación de una onda senoidal en decadencia.

Consejos sobre la VM

Una vez finalizado el arranque de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y le resolveremos el problema inmediatamente.

Importar bibliotecas

En primer lugar, necesitamos importar las bibliotecas necesarias. En este laboratorio utilizaremos Matplotlib y NumPy.

import itertools

import matplotlib.pyplot as plt
import numpy as np

import matplotlib.animation as animation

Crear la función generadora de datos

A continuación, necesitamos crear una función para generar los datos de la animación. La función producirá una onda senoidal que decae con el tiempo. Utilizaremos la función itertools.count() para generar una secuencia infinita de números. Utilizaremos estos números para calcular los valores de la onda senoidal.

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

Configurar la trama

Ahora, necesitamos configurar la trama. Crearemos una figura y un objeto de ejes utilizando la función subplots() de Matplotlib. También crearemos un objeto de línea para representar la onda senoidal.

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

Definir la función de inicialización

Necesitamos definir una función de inicialización que establezca el estado inicial de la trama. En esta función, estableceremos los límites del eje y y limpiaremos los datos del objeto de línea.

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,

Definir la función de animación

Ahora, necesitamos definir la función que actualizará la trama para cada fotograma de la animación. Esta función tomará los datos generados por la función data_gen() y actualizará la trama con los nuevos datos. También actualizaremos los límites del eje x a medida que avanza la animación.

def run(data):
    ## actualizar los datos
    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,

Crear la animación

Finalmente, podemos crear la animación utilizando la clase FuncAnimation. Pasaremos los parámetros fig, run, data_gen, init_func e interval para crear la animación. También estableceremos el parámetro save_count en 100 para asegurarnos de que solo se guarden los últimos 100 fotogramas.

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

Mostrar la trama

Ahora podemos mostrar la trama utilizando la función show() de Matplotlib.

plt.show()

Resumen

En este laboratorio, aprendimos cómo crear una trama animada utilizando Matplotlib. Utilizamos la clase FuncAnimation para crear una animación de una onda senoidal en decadencia. También aprendimos cómo configurar una trama, definir una función generadora de datos, definir una función de inicialización, definir una función de animación y crear la animación.