Introducción
En este laboratorio, aprenderemos a crear un gráfico de paseo aleatorio 3D animado utilizando la biblioteca Matplotlib en Python. Crearemos un gráfico 3D y simularemos un paseo aleatorio con 40 partículas que se mueven aleatoriamente en el espacio tridimensional.
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 su retroalimentación después de la sesión y resolveremos rápidamente el problema para usted.
Importar las bibliotecas necesarias
Comenzamos importando las bibliotecas necesarias. Utilizaremos numpy para generar números aleatorios y matplotlib para crear el gráfico.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
Definir la función de paseo aleatorio
Definimos una función que genera un paseo aleatorio con un número dado de pasos y un tamaño máximo de paso. La función toma dos entradas: num_steps es el número total de pasos en el paseo aleatorio y max_step es el tamaño máximo de cada paso. Utilizamos numpy.random para generar números aleatorios para los pasos y numpy.cumsum para calcular la suma acumulativa de los pasos para obtener la posición final.
def random_walk(num_steps, max_step=0.05):
"""Return a 3D random walk as (num_steps, 3) array."""
start_pos = np.random.random(3)
steps = np.random.uniform(-max_step, max_step, size=(num_steps, 3))
walk = start_pos + np.cumsum(steps, axis=0)
return walk
Definir la función de actualización
Definimos una función que actualiza el gráfico para cada fotograma de la animación. La función toma tres entradas: num es el número actual del fotograma, walks es una lista de todos los paseos aleatorios y lines es una lista de todas las líneas en el gráfico. Para cada línea y paseo, actualizamos los datos de las coordenadas x, y y z de la línea hasta el número actual de fotograma. Utilizamos line.set_data() y line.set_3d_properties() para actualizar las coordenadas x-y y z, respectivamente.
def update_lines(num, walks, lines):
for line, walk in zip(lines, walks):
## NOTE: there is no.set_data() for 3 dim data...
line.set_data(walk[:num, :2].T)
line.set_3d_properties(walk[:num, 2])
return lines
Generar paseos aleatorios
Generamos 40 paseos aleatorios con 30 pasos cada uno utilizando la función random_walk() definida anteriormente. Guardamos todos los paseos aleatorios en una lista llamada walks.
## Data: 40 random walks as (num_steps, 3) arrays
num_steps = 30
walks = [random_walk(num_steps) for index in range(40)]
Crear un gráfico tridimensional
Creamos un gráfico tridimensional utilizando matplotlib. Agregamos una línea vacía para cada paseo aleatorio al gráfico. Establecemos los límites para los ejes x, y y z entre 0 y 1.
## Attaching 3D axis to the figure
fig = plt.figure()
ax = fig.add_subplot(projection="3d")
## Create lines initially without data
lines = [ax.plot([], [], [])[0] for _ in walks]
## Setting the axes properties
ax.set(xlim3d=(0, 1), xlabel='X')
ax.set(ylim3d=(0, 1), ylabel='Y')
ax.set(zlim3d=(0, 1), zlabel='Z')
Crear una animación
Creamos una animación utilizando la clase FuncAnimation de matplotlib.animation. Pasamos el objeto de figura, la función de actualización, el número total de fotogramas (que es igual al número de pasos en los paseos aleatorios), la lista de todos los paseos aleatorios y la lista de todas las líneas como argumentos al constructor de FuncAnimation.
## Creating the Animation object
ani = animation.FuncAnimation(
fig, update_lines, num_steps, fargs=(walks, lines), interval=100)
Mostrar la animación
Finalmente, mostramos la animación utilizando plt.show().
plt.show()
Resumen
Hemos aprendido cómo crear un gráfico animado de paseos aleatorios tridimensionales utilizando la biblioteca Matplotlib en Python. Generamos paseos aleatorios y actualizamos el gráfico para cada fotograma de la animación. Esta técnica se puede utilizar para visualizar el movimiento de partículas, difusión y otros procesos estocásticos en el espacio tridimensional.