Introdução
Este laboratório passo a passo demonstra como criar uma animação com múltiplos subplots usando Matplotlib em Python. O exemplo mostra como animar um círculo e uma curva senoidal em dois subplots diferentes.
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 Bibliotecas
O primeiro passo é importar as bibliotecas necessárias, incluindo Matplotlib, NumPy e o módulo de animação do Matplotlib.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
from matplotlib.patches import ConnectionPatch
Criar a Figura e os Subplots
O segundo passo é criar a figura e os subplots que serão usados para a animação. Neste exemplo, criamos dois subplots lado a lado com diferentes proporções de aspecto. O subplot da esquerda é um círculo unitário, e o subplot da direita é um gráfico vazio que será usado para animar uma curva senoidal.
fig, (axl, axr) = plt.subplots(
ncols=2,
sharey=True,
figsize=(6, 2),
gridspec_kw=dict(width_ratios=[1, 3], wspace=0),
)
axl.set_aspect(1)
axr.set_box_aspect(1 / 3)
axr.yaxis.set_visible(False)
axr.xaxis.set_ticks([0, np.pi, 2 * np.pi], ["0", r"$\pi$", r"$2\pi$"])
Desenhar o Círculo e o Ponto Inicial
O terceiro passo é desenhar o círculo e o ponto inicial no subplot da esquerda. Criamos um array de ângulos para gerar o círculo e, em seguida, plotamos o seno e o cosseno de cada ângulo. Também plotamos um único ponto na origem.
x = np.linspace(0, 2 * np.pi, 50)
axl.plot(np.cos(x), np.sin(x), "k", lw=0.3)
point, = axl.plot(0, 0, "o")
Desenhar a Curva Senoidal
O quarto passo é desenhar a curva senoidal no subplot da direita. Criamos um array de ângulos e, em seguida, plotamos o seno de cada ângulo. Também salvamos o objeto de plotagem sine, que atualizaremos mais tarde na animação.
sine, = axr.plot(x, np.sin(x))
Desenhar a Linha de Conexão
O quinto passo é desenhar uma linha pontilhada conectando os dois subplots. Criamos um objeto ConnectionPatch que conecta a origem do subplot da esquerda à borda direita do subplot da direita. Também salvamos o objeto de patch con, que atualizaremos mais tarde na animação.
con = ConnectionPatch(
(1, 0),
(0, 0),
"data",
"data",
axesA=axl,
axesB=axr,
color="C0",
ls="dotted",
)
fig.add_artist(con)
Definir a Função de Animação
O sexto passo é definir a função de animação. Esta função será chamada para cada quadro da animação e atualizará a posição do ponto no subplot da esquerda, a posição e os dados da curva senoidal no subplot da direita e a posição do patch de conexão.
def animate(i):
x = np.linspace(0, i, int(i * 25 / np.pi))
sine.set_data(x, np.sin(x))
x, y = np.cos(i), np.sin(i)
point.set_data([x], [y])
con.xy1 = x, y
con.xy2 = i, y
return point, sine, con
Criar a Animação
O sétimo passo é criar o objeto de animação usando a função FuncAnimation. Passamos o objeto da figura, a função de animação, o intervalo entre os quadros em milissegundos, o número de quadros e um atraso antes de repetir a animação.
ani = animation.FuncAnimation(
fig,
animate,
interval=50,
blit=False, ## blitting can't be used with Figure artists
frames=x,
repeat_delay=100,
)
Mostrar a Animação
O passo final é mostrar a animação usando a função show do módulo pyplot.
plt.show()
Resumo
Este laboratório passo a passo demonstrou como criar uma animação com múltiplos subplots usando Matplotlib em Python. O exemplo mostrou como animar um círculo e uma curva senoidal em dois subplots diferentes. Os passos incluíram importar bibliotecas, criar a figura e os subplots, desenhar o círculo e o ponto inicial, desenhar a curva senoidal, desenhar a linha de conexão, definir a função de animação, criar o objeto de animação e mostrar a animação.