Crear subtramas animadas con Matplotlib

Beginner

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

Introducción

Este laboratorio paso a paso demuestra cómo crear una animación con múltiples subtramas utilizando Matplotlib en Python. El ejemplo muestra cómo animar un círculo y una curva senoidal a través de dos subtramas diferentes.

Consejos sobre la VM

Una vez finalizada la inicialización 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 las 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 sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar bibliotecas

El primer paso es importar las bibliotecas necesarias, incluyendo Matplotlib, NumPy y el módulo de animación de Matplotlib.

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

Crear la figura y los subtramas

El segundo paso es crear la figura y los subtramas que se utilizarán para la animación. En este ejemplo, creamos dos subtramas lado a lado con diferentes relaciones de aspecto. La subtrama izquierda es un círculo unitario y la subtrama derecha es una trama vacía que se utilizará para animar una curva senoidal.

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$"])

Dibujar el círculo y el punto inicial

El tercer paso es dibujar el círculo y el punto inicial en la subtrama izquierda. Creamos una matriz de ángulos para generar el círculo y luego trazamos el seno y el coseno de cada ángulo. También trazamos un solo punto en el origen.

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")

Dibujar la curva senoidal

El cuarto paso es dibujar la curva senoidal en la subtrama derecha. Creamos una matriz de ángulos y luego trazamos el seno de cada ángulo. También guardamos el objeto de trazado sine, que actualizaremos más adelante en la animación.

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

Dibujar la línea de conexión

El quinto paso es dibujar una línea discontinua que conecte las dos subtramas. Creamos un objeto ConnectionPatch que conecta el origen de la subtrama izquierda con el borde derecho de la subtrama derecha. También guardamos el objeto de parche con, que actualizaremos más adelante en la animación.

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

Definir la función de animación

El sexto paso es definir la función de animación. Esta función se llamará para cada fotograma de la animación y actualizará la posición del punto en la subtrama izquierda, la posición y los datos de la curva senoidal en la subtrama derecha y la posición del parche de conexión.

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

Crear la animación

El séptimo paso es crear el objeto de animación utilizando la función FuncAnimation. Le pasamos el objeto de figura, la función de animación, el intervalo entre fotogramas en milisegundos, el número de fotogramas y un retraso antes de repetir la animación.

ani = animation.FuncAnimation(
    fig,
    animate,
    interval=50,
    blit=False,  ## blitting no se puede utilizar con artistas de Figure
    frames=x,
    repeat_delay=100,
)

Mostrar la animación

El último paso es mostrar la animación utilizando la función show del módulo pyplot.

plt.show()

Resumen

Esta práctica paso a paso demostró cómo crear una animación con múltiples subtramas utilizando Matplotlib en Python. El ejemplo mostró cómo animar un círculo y una curva senoidal en dos subtramas diferentes. Los pasos incluyeron importar las bibliotecas, crear la figura y las subtramas, dibujar el círculo y el punto inicial, dibujar la curva senoidal, dibujar la línea de conexión, definir la función de animación, crear el objeto de animación y mostrar la animación.