Introdução
Matplotlib é uma biblioteca de visualização de dados utilizada para criar visualizações estáticas, animadas e interativas em Python. Neste laboratório, aprenderemos como criar um gráfico animado usando Matplotlib. Usaremos a classe FuncAnimation para criar uma animação de uma onda senoidal decrescente.
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
Primeiramente, precisamos importar as bibliotecas necessárias. Usaremos Matplotlib e NumPy neste laboratório.
import itertools
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
Criar a função geradora de dados
Em seguida, precisamos criar uma função para gerar os dados para a animação. A função produzirá uma onda senoidal que decai ao longo do tempo. Usaremos a função itertools.count() para gerar uma sequência infinita de números. Usaremos esses números para calcular os valores da onda senoidal.
def data_gen():
for cnt in itertools.count():
t = cnt / 10
yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)
Configurar o gráfico
Agora, precisamos configurar o gráfico. Criaremos uma figura e um objeto de eixos usando a função subplots() do Matplotlib. Também criaremos um objeto de linha para representar a onda senoidal.
fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.grid()
xdata, ydata = [], []
Definir a função de inicialização
Precisamos definir uma função de inicialização que definirá o estado inicial do gráfico. Nesta função, definiremos os limites do eixo y e limparmos os dados do objeto de linha.
def init():
ax.set_ylim(-1.1, 1.1)
ax.set_xlim(0, 1)
del xdata[:]
del ydata[:]
line.set_data(xdata, ydata)
return line,
Definir a função de animação
Agora, precisamos definir a função que atualizará o gráfico para cada quadro da animação. Esta função receberá os dados gerados pela função data_gen() e atualizará o gráfico com os novos dados. Também atualizaremos os limites do eixo x à medida que a animação progride.
def run(data):
## update the data
t, y = data
xdata.append(t)
ydata.append(y)
xmin, xmax = ax.get_xlim()
if t >= xmax:
ax.set_xlim(xmin, 2*xmax)
ax.figure.canvas.draw()
line.set_data(xdata, ydata)
return line,
Criar a animação
Finalmente, podemos criar a animação usando a classe FuncAnimation. Passaremos os parâmetros fig, run, data_gen, init_func e interval para criar a animação. Também definiremos o parâmetro save_count como 100 para garantir que apenas os últimos 100 quadros sejam salvos.
ani = animation.FuncAnimation(fig, run, data_gen, interval=100, init_func=init,
save_count=100)
Mostrar o gráfico
Agora podemos mostrar o gráfico usando a função show() do Matplotlib.
plt.show()
Resumo
Neste laboratório, aprendemos como criar um gráfico animado usando Matplotlib. Usamos a classe FuncAnimation para criar uma animação de uma onda senoidal decrescente. Também aprendemos como configurar um gráfico, definir uma função geradora de dados, definir uma função de inicialização, definir uma função de animação e criar a animação.