Demonstração do Seletor Lasso Sgskip

Beginner

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

Introdução

Neste laboratório, você aprenderá como selecionar interativamente pontos de dados com a ferramenta lasso usando Python Matplotlib. Você plotará um gráfico de dispersão e, em seguida, selecionará alguns pontos desenhando um laço lasso (lasso loop) ao redor dos pontos no gráfico. Para desenhar, basta clicar no gráfico, segurar e arrastar ao redor dos pontos que você precisa selecionar.

Dicas da 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

Importe as bibliotecas necessárias, incluindo numpy, Path e LassoSelector.

import numpy as np
from matplotlib.path import Path
from matplotlib.widgets import LassoSelector

Criar a Classe Seletora

Crie a classe SelectFromCollection que selecionará índices de uma coleção Matplotlib usando LassoSelector.

class SelectFromCollection:
    """
    Seleciona índices de uma coleção matplotlib usando `LassoSelector`.

    Os índices selecionados são salvos no atributo `ind`. Esta ferramenta atenua os
    pontos que não fazem parte da seleção (ou seja, reduz seus valores alfa). Se sua
    coleção tiver alfa < 1, esta ferramenta alterará permanentemente os valores alfa.

    Observe que esta ferramenta seleciona objetos de coleção com base em suas *origens*
    (ou seja, `offsets`).

    Parâmetros
    ----------
    ax : `~matplotlib.axes.Axes`
        Eixos para interagir.
    collection : subclasse `matplotlib.collections.Collection`
        Coleção da qual você deseja selecionar.
    alpha_other : 0 <= float <= 1
        Para destacar uma seleção, esta ferramenta define todos os pontos selecionados para um
        valor alfa de 1 e pontos não selecionados para *alpha_other*.
    """

    def __init__(self, ax, collection, alpha_other=0.3):
        self.canvas = ax.figure.canvas
        self.collection = collection
        self.alpha_other = alpha_other

        self.xys = collection.get_offsets()
        self.Npts = len(self.xys)

        ## Certifique-se de que temos cores separadas para cada objeto
        self.fc = collection.get_facecolors()
        if len(self.fc) == 0:
            raise ValueError('Collection must have a facecolor')
        elif len(self.fc) == 1:
            self.fc = np.tile(self.fc, (self.Npts, 1))

        self.lasso = LassoSelector(ax, onselect=self.onselect)
        self.ind = []

    def onselect(self, verts):
        path = Path(verts)
        self.ind = np.nonzero(path.contains_points(self.xys))[0]
        self.fc[:, -1] = self.alpha_other
        self.fc[self.ind, -1] = 1
        self.collection.set_facecolors(self.fc)
        self.canvas.draw_idle()

    def disconnect(self):
        self.lasso.disconnect_events()
        self.fc[:, -1] = 1
        self.collection.set_facecolors(self.fc)
        self.canvas.draw_idle()

Criar o Gráfico de Dispersão

Crie um gráfico de dispersão usando dados gerados aleatoriamente.

np.random.seed(19680801)
data = np.random.rand(100, 2)

subplot_kw = dict(xlim=(0, 1), ylim=(0, 1), autoscale_on=False)
fig, ax = plt.subplots(subplot_kw=subplot_kw)
pts = ax.scatter(data[:, 0], data[:, 1], s=80)
selector = SelectFromCollection(ax, pts)

Aceitar os Pontos Selecionados

Aceite os pontos selecionados usando a tecla Enter e imprima-os no console.

def accept(event):
    if event.key == "enter":
        print("Selected points:")
        print(selector.xys[selector.ind])
        selector.disconnect()
        ax.set_title("")
        fig.canvas.draw()

fig.canvas.mpl_connect("key_press_event", accept)
ax.set_title("Press enter to accept selected points.")

plt.show()

Resumo

Neste laboratório, você aprendeu como selecionar interativamente pontos de dados com a ferramenta lasso usando Python Matplotlib. Você criou um gráfico de dispersão, selecionou alguns pontos desenhando um laço (lasso) ao redor dos pontos no gráfico e, em seguida, aceitou os pontos selecionados usando a tecla Enter.