Criando Gráficos Animados com Matplotlib

Beginner

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

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.