Demonstração Lasso com Matplotlib

Beginner

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

Introdução

Neste laboratório, você aprenderá como usar a biblioteca Matplotlib para criar um gráfico interativo que permite aos usuários selecionar um conjunto de pontos usando uma ferramenta lasso. Você também aprenderá como usar uma função de callback para alterar a cor dos pontos selecionados.

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, importe as bibliotecas necessárias para o laboratório. Usaremos matplotlib para criar o gráfico e numpy para gerar dados aleatórios.

import matplotlib.pyplot as plt
import numpy as np

Criar a Classe LassoManager

Em seguida, crie a classe LassoManager que irá lidar com a funcionalidade lasso. O método __init__ inicializa o gráfico e o objeto collection. O método callback altera a cor dos pontos selecionados, e os métodos on_press e on_release lidam com os eventos do mouse.

class LassoManager:
    def __init__(self, ax, data):
        ## A informação sobre se um ponto foi selecionado ou não é armazenada no
        ## array da collection (0 = fora, 1 = dentro), que então é mapeado por cores para azul
        ## (fora) e vermelho (dentro).
        self.collection = RegularPolyCollection(
            6, sizes=(100,), offset_transform=ax.transData,
            offsets=data, array=np.zeros(len(data)),
            clim=(0, 1), cmap=mcolors.ListedColormap(["tab:blue", "tab:red"]))
        ax.add_collection(self.collection)
        canvas = ax.figure.canvas
        canvas.mpl_connect('button_press_event', self.on_press)
        canvas.mpl_connect('button_release_event', self.on_release)

    def callback(self, verts):
        data = self.collection.get_offsets()
        self.collection.set_array(path.Path(verts).contains_points(data))
        canvas = self.collection.figure.canvas
        canvas.draw_idle()
        del self.lasso

    def on_press(self, event):
        canvas = self.collection.figure.canvas
        if event.inaxes is not self.collection.axes or canvas.widgetlock.locked():
            return
        self.lasso = Lasso(event.inaxes, (event.xdata, event.ydata), self.callback)
        canvas.widgetlock(self.lasso)  ## acquire a lock on the widget drawing

    def on_release(self, event):
        canvas = self.collection.figure.canvas
        if hasattr(self, 'lasso') and canvas.widgetlock.isowner(self.lasso):
            canvas.widgetlock.release(self.lasso)

Criar o Gráfico

Agora, use a classe LassoManager para criar um gráfico interativo. A função np.random.rand gera pontos de dados aleatórios que serão plotados.

if __name__ == '__main__':
    np.random.seed(19680801)
    ax = plt.figure().add_subplot(
        xlim=(0, 1), ylim=(0, 1), title='Lasso points using left mouse button')
    manager = LassoManager(ax, np.random.rand(100, 2))
    plt.show()

Resumo

Neste laboratório, você aprendeu como usar o Matplotlib para criar um gráfico interativo que permite aos usuários selecionar um conjunto de pontos usando uma ferramenta lasso. Você também aprendeu como usar uma função de callback para alterar a cor dos pontos selecionados. Essa funcionalidade pode ser estendida para outros projetos que exigem seleção interativa de dados.