Criando um Efeito de Lupa com Matplotlib

Beginner

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

Introdução

Este laboratório irá guiá-lo através da criação de um efeito de espelho mágico (looking glass effect) usando eventos de mouse em Matplotlib. Este exemplo permitirá que você inspecione dados em uma área circular que pode ser movida ao redor clicando e arrastando.

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ê.

Importando as Bibliotecas Necessárias

Precisamos importar a biblioteca Matplotlib, a biblioteca NumPy e o módulo patches do Matplotlib. Usaremos essas bibliotecas para criar nosso efeito de espelho mágico (looking glass effect).

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

Gerando os Dados Aleatórios

Geraremos dois conjuntos de dados aleatórios usando NumPy. Esses dados serão plotados para criar um gráfico de dispersão (scatterplot).

## Fixing random state for reproducibility
np.random.seed(19680801)

x, y = np.random.rand(2, 200)

Criando a Figura e os Eixos

Criaremos o objeto figura e eixos usando a função subplots(). Também adicionaremos um patch de círculo amarelo ao objeto eixos usando a função patches.Circle().

fig, ax = plt.subplots()
circ = patches.Circle((0.5, 0.5), 0.25, alpha=0.8, fc='yellow')
ax.add_patch(circ)

Plotando os Dados

Plotaremos os dados aleatórios gerados no Passo 2 usando a função plot() duas vezes. O primeiro gráfico terá um valor alpha de 0.2 e o segundo gráfico terá um valor alpha de 1.0 e um caminho de recorte (clip path) definido para o patch de círculo amarelo.

ax.plot(x, y, alpha=0.2)
line, = ax.plot(x, y, alpha=1.0, clip_path=circ)
ax.set_title("Left click and drag to move looking glass")

Criando o Manipulador de Eventos

Criaremos uma classe manipuladora de eventos que lidará com os eventos do mouse necessários para mover o patch de círculo amarelo ao redor do gráfico. Esta classe conterá três métodos: on_press(), on_release() e on_move().

class EventHandler:
    def __init__(self):
        fig.canvas.mpl_connect('button_press_event', self.on_press)
        fig.canvas.mpl_connect('button_release_event', self.on_release)
        fig.canvas.mpl_connect('motion_notify_event', self.on_move)
        self.x0, self.y0 = circ.center
        self.pressevent = None

    def on_press(self, event):
        if event.inaxes != ax:
            return

        if not circ.contains(event)[0]:
            return

        self.pressevent = event

    def on_release(self, event):
        self.pressevent = None
        self.x0, self.y0 = circ.center

    def on_move(self, event):
        if self.pressevent is None or event.inaxes != self.pressevent.inaxes:
            return

        dx = event.xdata - self.pressevent.xdata
        dy = event.ydata - self.pressevent.ydata
        circ.center = self.x0 + dx, self.y0 + dy
        line.set_clip_path(circ)
        fig.canvas.draw()

handler = EventHandler()
plt.show()

Executando o Programa

Execute o programa e clique com o botão esquerdo e arraste o patch de círculo amarelo para movê-lo ao redor do gráfico. Você pode usar este efeito para inspecionar dados dentro da área circular.

Resumo

Neste laboratório, aprendemos como criar um efeito de lupa (looking glass effect) usando eventos de mouse em Matplotlib. Geramos dados aleatórios, plotamos os dados e criamos uma classe manipuladora de eventos para lidar com eventos de mouse. Ao clicar com o botão esquerdo e arrastar o patch de círculo amarelo, fomos capazes de movê-lo ao redor do gráfico e inspecionar dados dentro da área circular.