Caminata aleatoria tridimensional animada en Matplotlib

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.