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.