Skip to content

Como criar um gráfico interativo com Matplotlib

Updated on

A criação de gráficos estáticos padrão utilizando Python e Matplotlib é bem conhecida, com muitos guias e recursos disponíveis. No entanto, quando se trata de criar gráficos interativos - gráficos que você pode ampliar, deslocar e atualizar em tempo real - as informações podem ser escassas.

Neste guia abrangente, desmistificaremos o processo de criação de gráficos interativos com Matplotlib. Vamos guiá-lo por alguns exemplos passo a passo, garantindo que você tenha todas as habilidades necessárias para criar suas próprias visualizações interativas.

Começando com gráficos interativos no Matplotlib

Antes de começarmos, é importante entender o que é um gráfico interativo. Um gráfico interativo, ao contrário de um estático, permite que os usuários interajam com os dados em tempo real. Isso pode significar ampliar e reduzir um gráfico, atualizar o gráfico em resposta a interações com os widgets, ou até mesmo criar um gráfico dinâmico que atualiza em tempo real com base nos dados de entrada.

Para habilitar a interatividade no Matplotlib, precisamos utilizar certos backends que suportam o modo interativo. O modo padrão do Matplotlib é não interativo e todos os gráficos são estáticos. Para tornar um gráfico interativo, precisamos alternar para um backend diferente, como 'notebook' ou 'widget'.

Nos notebooks Jupyter, você pode usar o comando mágico %matplotlib notebook para alternar para o backend de notebook e tornar seus gráficos interativos. Este é um primeiro passo importante para a criação de gráficos interativos.

Criando seu primeiro gráfico interativo

Agora que definimos o cenário, vamos criar nosso primeiro gráfico interativo. Vamos começar com um exemplo simples: um gráfico de dispersão.

%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
 
# Crie um gráfico de dispersão simples
fig, ax = plt.subplots()
x, y = np.random.rand(2, 200)
scatter = ax.scatter(x, y)
 
plt.show()

Quando você executar o código acima em um notebook Jupyter, verá que o gráfico é interativo. Você pode ampliar e reduzir usando a barra de ferramentas na parte inferior do gráfico.

Criando gráficos interativos com widgets

O verdadeiro poder dos gráficos interativos é quando você os combina com widgets. Os widgets permitem que os usuários interajam com o gráfico e controlem aspectos dos dados e da visualização.

Vamos dar uma olhada em um exemplo em que criamos um gráfico de onda senoidal e usamos um controle deslizante para controlar a frequência da onda.

from ipywidgets import interact
import ipywidgets as widgets
 
def plot_func(freq):
    plt.figure()
    x = np.linspace(0, 2*np.pi, 400)
    y = np.sin(x * freq)
    plt.plot(x, y)
    plt.show()
 
interact(plot_func, freq=widgets.FloatSlider(value=7.5, min=1, max=10, step=0.5));

No trecho de código acima, primeiro definimos uma função plot_func que gera uma onda senoidal para uma determinada frequência. Em seguida, usamos a função interact do ipywidgets para criar um controle deslizante que controla a frequência. Quando você executar este código, verá um controle deslizante aparecer acima do seu gráfico. Ao deslizar o controle deslizante, a frequência da onda senoidal muda em tempo real.

Esses exemplos fornecem uma introdução à criação de gráficos interativos com Matplotlib. Nas próximas seções, exploraremos exemplos mais complexos e aprofundaremos nas funcionalidades dos gráficos interativos.

Continuando de onde paramos, vamos nos aprofundar ainda mais no fascinante mundo das capacidades interativas do Matplotlib.

Aumentando a interatividade com widgets

Os widgets não se limitam a controles deslizantes, você pode usar caixas de seleção, menus suspensos, campos de entrada de texto e muitos outros. Cada tipo de widget pode estar associado a diferentes tipos de manipulação de dados. Por exemplo, um menu suspenso pode ser usado para selecionar qual conjunto de dados exibir no gráfico. Os widgets oferecem flexibilidade para criar visualizações verdadeiramente interativas e versáteis.

Atualizando gráficos dinamicamente

Para atualizar gráficos dinamicamente com base na interação do usuário, você precisará entender o conceito de eventos no Matplotlib. Eventos são entradas dos usuários, como cliques de mouse, pressionamentos de tecla ou até mesmo mover o mouse sobre o gráfico. Capturando e processando esses eventos, você pode atualizar seus gráficos em resposta às entradas do usuário.

Aqui está um exemplo que ilustra como você pode usar um evento de pressionamento de botão para adicionar novos pontos de dados a um gráfico de dispersão:

from matplotlib.widgets import Button
 
fig, ax = plt.subplots()
scatter = ax.scatter(np.random.rand(10), np.random.rand(10))
 
button_ax = plt.axes([0.7, 0.05, 0.1, 0.075])
button = Button(button_ax, 'Adicionar')
 
def add_point(event):
    new_point = np.random.rand(2)
    scatter.set_offsets(np.concatenate([scatter.get_offsets(), [new_point]]))
    plt.draw()
 
button.on_clicked(add_point)
 
plt.show()

Neste código, estamos criando um gráfico de dispersão e um botão. Quando o botão é clicado, ele aciona a função add_point, que adiciona um novo ponto de dados aleatório ao gráfico de dispersão.

Gráficos 3D interativos

O Matplotlib também oferece suporte à criação de gráficos 3D interativos. Isso permite que você gire o gráfico e amplie/reduza para examinar os dados a partir de ângulos diferentes. Aqui está um exemplo de um gráfico de dispersão 3D:

from mpl_toolkits.mplot3d import Axes3D
 
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
x, y, z = np.random.rand(3, 100)
ax.scatter(x, y, z)
 
plt.show()

Neste gráfico, você pode usar o mouse para arrastar e girar o gráfico no espaço 3D e usar a roda de rolagem para ampliar e reduzir.

Usando essas técnicas, você pode criar uma ampla variedade de gráficos interativos no Matplotlib. Gráficos interativos são uma ferramenta poderosa para análise e visualização de dados, pois permitem explorar seus dados de forma mais detalhada e intuitiva.

Alternativa ao Matplotlib: Visualize Dados com PyGWalker

Além de usar o Matplotlib para visualizar seu dataframe do pandas, aqui está uma alternativa, uma biblioteca Open Source em python que pode ajudar a criar visualizações de dados com facilidade: PyGWalker (opens in a new tab).

PyGWalker para visualização de dados (opens in a new tab)

Não é mais necessário completar processamentos complicados com código Python, simplesmente importe seus dados e arraste e solte variáveis para criar todos os tipos de visualizações de dados! Aqui está um vídeo rápido de demonstração sobre a operação:


Aqui está como usar o PyGWalker no seu Jupyter Notebook:

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

Alternativamente, você pode experimentá-lo no Kaggle Notebook/Google Colab:

Execute o PyGWalker no Kaggle Notebook (opens in a new tab)Execute o PyGWalker no Google Colab (opens in a new tab)Dê uma ⭐️ no PyGWalker no GitHub (opens in a new tab)
Execute o PyGWalker no Kaggle Notebook (opens in a new tab)Execute o PyGWalker no Google Colab (opens in a new tab)Dê uma ⭐️ no PyGWalker no GitHub (opens in a new tab)

O PyGWalker é construído com o apoio da nossa comunidade Open Source. Não se esqueça de conferir o GitHub do PyGWalker (opens in a new tab) e nos dar uma estrela!

Perguntas Frequentes

  1. O que é um gráfico interativo?
    Um gráfico interativo é um gráfico que permite aos usuários interagir com ele. Os usuários podem dar zoom, pan no gráfico e até mesmo atualizá-lo em tempo real, dependendo das funcionalidades implementadas.

  2. Como posso tornar meus gráficos do Matplotlib interativos?
    Você pode tornar seus gráficos do Matplotlib interativos usando um backend interativo como 'notebook' ou 'widget'. Em um Jupyter notebook, você pode usar o comando mágico %matplotlib notebook para habilitar o modo interativo.

  3. Posso usar widgets para interagir com meu gráfico do Matplotlib?
    Sim, você pode usar ipywidgets em conjunto com o Matplotlib para criar uma variedade de recursos interativos. Isso pode incluir sliders, botões, caixas de seleção e mais, que podem modificar os dados ou a aparência do gráfico em tempo real.