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.