La biblioteca Matplotlib de Python es una herramienta de trazado utilizada para trazar gráficos de funciones o figuras. También se puede utilizar como herramienta de animación. Los gráficos trazados, cuando se agregan con animaciones, brindan una visualización más poderosa y ayudan al presentador a captar una mayor cantidad de audiencia. Matplotlib también puede conectarse fácilmente con Pandas para crear animaciones aún más sofisticadas.
Las animaciones en Matplotlib se pueden hacer usando la Animation
clase de dos maneras:
- Al llamar a una función una y otra vez: utiliza una función predefinida que, cuando se ejecuta una y otra vez, crea una animación.
- Mediante el uso de objetos fijos: algunos objetos artísticos animados cuando se combinan con otros producen una escena de animación.
Es importante tener en cuenta que debemos mantener en todos los puntos una referencia al objeto animado o, de lo contrario, la animación se detendrá. Esto se debe a que Animation class
contiene una sola referencia de puntero al objeto de animación y, a medida que avanza el tiempo para ejecutar la animación, esta referencia de puntero debe mantenerse; de lo contrario, se recopilará como un valor no utilizado.
Aunque hay dos formas, la primera es más común y conveniente y aquí, solo usaremos esa. Sin embargo, también puede leer la documentación del otro aquí .
Sumerjámonos en las animaciones de Matplotlib.
Instalaciones requeridas:
1.
Numpy
yMatplotlib
2.ffmpeg
Descargue ffmpeg para Python desde aquí .
Veamos un ejemplo. Aquí intentaremos hacer una onda sinusoidal continua usando animaciones y herramientas de trazado. Haremos uso de numpy
y pyplot
de matplotlib
para esto. Como ya se dijo, usaremos el método de función en lugar de los objetos artísticos.
Nota: Para guardar una animación en su computadora, use anim.save(filename)
o Animation.to_html5_video
.
from matplotlib import pyplot as plt import numpy as np from matplotlib.animation import FuncAnimation # initializing a figure in # which the graph will be plotted fig = plt.figure() # marking the x-axis and y-axis axis = plt.axes(xlim =(0, 4), ylim =(-2, 2)) # initializing a line variable line, = axis.plot([], [], lw = 3) # data which the line will # contain (x, y) def init(): line.set_data([], []) return line, def animate(i): x = np.linspace(0, 4, 1000) # plots a sine graph y = np.sin(2 * np.pi * (x - 0.01 * i)) line.set_data(x, y) return line, anim = FuncAnimation(fig, animate, init_func = init, frames = 200, interval = 20, blit = True) anim.save('continuousSineWave.mp4', writer = 'ffmpeg', fps = 30)
Al principio, después de importar las necesidades, configuramos una figura en blanco o una ventana en blanco en la que se dibujará toda la animación. A continuación, inicializamos una variable line
que contendrá las coordenadas x e y del gráfico. Estos se mantienen vacíos al principio, ya que los datos en él seguirán cambiando continuamente debido a la animación. Finalmente, establecemos la función de animación animate(i)
que toma un argumento i , donde i se llama el número de cuadro y usando esto creamos la onda sinusoidal (o cualquier otra figura) que variará continuamente dependiendo del valor de i . En la última línea anim = FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True)
usamos la FuncAnimation
función para crear una animación que mostrará 200 fotogramas por segundo y en un intervalo de 20 microsegundos.
Producción :
Esa es una visualización muy poderosa. Una cosa a tener en cuenta es que cuando vemos nuestro gif guardado, será un clip continuo a diferencia del video en nuestra salida que finaliza en unos segundos. Veamos un ejemplo más. Intenta adivinar la salida a medida que codificamos el programa, ya que aclarará nuestro concepto.
import matplotlib.animation as animation import matplotlib.pyplot as plt import numpy as np # creating a blank window # for the animation fig = plt.figure() axis = plt.axes(xlim =(-50, 50), ylim =(-50, 50)) line, = axis.plot([], [], lw = 2) # what will our line dataset # contain? def init(): line.set_data([], []) return line, # initializing empty values # for x and y co-ordinates xdata, ydata = [], [] # animation function def animate(i): # t is a parameter which varies # with the frame number t = 0.1 * i # x, y values to be plotted x = t * np.sin(t) y = t * np.cos(t) # appending values to the previously # empty x and y data holders xdata.append(x) ydata.append(y) line.set_data(xdata, ydata) return line, # calling the animation function anim = animation.FuncAnimation(fig, animate, init_func = init, frames = 500, interval = 20, blit = True) # saves the animation in our desktop anim.save('growingCoil.mp4', writer = 'ffmpeg', fps = 30)
Como ya podríamos haber adivinado y tan obvio como sugiere el nombre del archivo guardado, es una animación de una bobina en continuo crecimiento. Al igual que antes, primero importamos todos los módulos. Pero esta vez, importamos la matplotlib.animation
biblioteca por completo .
import matplotlib.animation as animation
sin embargo, en el ejemplo anterior, importamos solo la FuncAnimation
función de él
from matplotlib.animation import FuncAnimation
Sin embargo, esto realmente no hace ningún cambio y uno puede elegir cualquier forma de importación. Luego creamos una figura en la que se colocará la animación. La animate
función varía con el número de fotograma i . Una cosa que debe saber es que una bobina no es más que una función compuesta de seno y coseno. Tomamos la función seno en el eje x y el coseno en el eje y y la figura resultante da una bobina.
Producción:
Por lo tanto, concluimos que se pueden hacer muchas animaciones interesantes utilizando algunos conocimientos básicos de matplotlib
. Esto realmente es útil cuando se necesita presentar algunas visualizaciones con poder de animación adicional sin usar herramientas de animación de nivel superior como Blender.
Publicación traducida automáticamente
Artículo escrito por agarwalkeshav8399 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA