Creación de gráficos animados con Python

Publicado el 04 mayo 2020 por Daniel Rodríguez @analyticslane

Una de las herramientas más eficaces para la presentación de los resultados son los gráficos. Eficacia que se puede aumentar al animarlos. La creación de gráficos animados en Python es una tarea realmente sencilla gracias a MoviePy. Un módulo para la edición de video que se puede usar tanto para operaciones básicas, como para el procesamiento y la creación de efectos avanzados de video.

Instalación de MoviePy

MoviePy es una librería de Python que, como en la mayoría de los casos, se puede instalar a través de pip. Instalación que únicamente requiere escribir en la terminal el siguiente comando:

pip install moviepy

Creación de una serie de figuras

Antes de poder crear un gráfico animado es necesario crear varias figuras. Los fotogramas de la animación. Estos fotogramas se tienen que guardar como imágenes en una carpeta del ordenador, lo que en Matplotlib se puede conseguir con el método savefig. Ahora, a modo de ejemplo, se puede representar la función exponencial para el eje x con valores que van de 2 a 16, lo que son 15 fotogramas. Estos fotogramas se pueden conseguir con el siguiente código:

import numpy as np
import matplotlib.pyplot as plt

for i in range(2, 17):
    x = np.arange(1, i, .1)
    y = np.exp(x)
    plt.plot(x, y)
    plt.savefig("./figures/figure{0:03d}.png".format(i))
    plt.clf()

En este código se puede ver que se cada una de las figura con el método plot(). Una vez creada la figura se guarda cada una en un archivo con un número que indica el orden en el que se han creado. Posteriormente los fotogramas se van a ordenar alfabéticamente con el nombre del archivo, por lo que, para evitar que el 16 aparezca antes del 2, se completan los números con cero hasta tres dígitos. Obviamente en animaciones con más fotogramas se puede agregar más cero para evitar el problema.

Creación final del video

Una vez se ha creado los fotogramas solamente es necesario obtener una lista con los archivos que se deben incluir en la animación. El listado de los archivos se puede obtener con glob. Para asegurar que los archivos estén en el orden correcto, se puede utilizar la función sort, el cual ordenara los archivos alfabéticamente.

import glob

file_list = sorted(glob.glob('./figures/*.png'))

Tras la obtención de la lista se puede proceder a creación el video. Para lo que se puede importar MoviePy como mpy y se puede usar el método ImageSequenceClip. Un método que tiene dos parámetros importantes el listado de archivos y el número de fotogramas por segundo. En nuestro caso, para crear un video de 5 con 15 fotogramas se va a indicar que el video tenga velocidad de 3 fotogramas por segundo.

import moviepy.editor as mpy

fps = 3
clip = mpy.ImageSequenceClip(file_list, fps=fps)
clip.write_gif('movie.gif')

Finalmente hay que exportar el archivo. Para usarlo en la web una opción puede ser un archivo gif que se puede conseguir mediante el método write_gif(). Generando una animación como la que se muestra a continuación.

Gráfico animado generado con MoviePy

Conclusiones

En esta entrada se ha visto como se puede usar MoviePy para la creación de gráficos animados con Python. Las animaciones son un recurso para presentar los resultados con el que se puede conseguir impacto mayor que con las imágenes estáticas, ya que se puede mostrar la evolución de los datos.

No te olvides valorar esta entrada

Contenido relacionado


Publicidad