Animação de Passeio Aleatório 3D em Matplotlib

Beginner

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

Introdução

Neste laboratório, aprenderemos como criar um gráfico animado de passeio aleatório 3D usando a biblioteca Matplotlib em Python. Criaremos um gráfico 3D e simularemos um passeio aleatório com 40 partículas que se movem aleatoriamente no espaço 3D.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Importar as Bibliotecas Necessárias

Começamos importando as bibliotecas necessárias. Usaremos numpy para gerar números aleatórios e matplotlib para criar o gráfico.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

Definir a Função de Passeio Aleatório

Definimos uma função que gera um passeio aleatório com um determinado número de passos e tamanho máximo do passo. A função recebe duas entradas: num_steps é o número total de passos no passeio aleatório e max_step é o tamanho máximo de cada passo. Usamos numpy.random para gerar números aleatórios para os passos e numpy.cumsum para calcular a soma cumulativa dos passos para obter a posição 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 a Função de Atualização

Definimos uma função que atualiza o gráfico para cada quadro da animação. A função recebe três entradas: num é o número do quadro atual, walks é uma lista de todos os passeios aleatórios e lines é uma lista de todas as linhas no gráfico. Para cada linha e passeio, atualizamos os dados para as coordenadas x, y e z da linha até o número do quadro atual. Usamos line.set_data() e line.set_3d_properties() para atualizar as coordenadas x-y e 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

Gerar Passeios Aleatórios

Geramos 40 passeios aleatórios com 30 passos cada, usando a função random_walk() definida anteriormente. Armazenamos todos os passeios aleatórios em uma lista chamada walks.

## Data: 40 random walks as (num_steps, 3) arrays
num_steps = 30
walks = [random_walk(num_steps) for index in range(40)]

Criar Gráfico 3D

Criamos um gráfico 3D usando matplotlib. Adicionamos uma linha vazia para cada passeio aleatório ao gráfico. Definimos os limites para os eixos x, y e z para que fiquem entre 0 e 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')

Criar Animação

Criamos uma animação usando a classe FuncAnimation de matplotlib.animation. Passamos o objeto da figura, a função de atualização, o número total de frames (que é igual ao número de passos nos passeios aleatórios), a lista de todos os passeios aleatórios e a lista de todas as linhas como argumentos para o construtor FuncAnimation.

## Creating the Animation object
ani = animation.FuncAnimation(
    fig, update_lines, num_steps, fargs=(walks, lines), interval=100)

Exibir Animação

Finalmente, exibimos a animação usando plt.show().

plt.show()

Resumo

Aprendemos como criar um gráfico animado de passeio aleatório 3D usando a biblioteca Matplotlib em Python. Geramos passeios aleatórios e atualizamos o gráfico para cada frame da animação. Esta técnica pode ser usada para visualizar o movimento de partículas, difusão e outros processos estocásticos em espaço 3D.