Introducción
En este laboratorio, aprenderá a usar la biblioteca Matplotlib para crear una trama interactiva que le permite a los usuarios seleccionar un conjunto de puntos usando una herramienta de lasso. También aprenderá a usar una función de devolución de llamada para cambiar el color de los puntos seleccionados.
Consejos sobre la VM
Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.
Importar bibliotecas
Primero, importe las bibliotecas necesarias para el laboratorio. Usaremos matplotlib para crear la trama y numpy para generar datos aleatorios.
import matplotlib.pyplot as plt
import numpy as np
Crear la clase LassoManager
A continuación, cree la clase LassoManager que manejará la funcionalidad del lasso. El método __init__ inicializa el objeto de trama y colección. El método callback cambia el color de los puntos seleccionados, y los métodos on_press y on_release manejan los eventos del mouse.
class LassoManager:
def __init__(self, ax, data):
## La información de si un punto ha sido seleccionado o no se almacena en
## el arreglo de la colección (0 = fuera, 1 = dentro), que luego se mapea
## a color azul (fuera) y rojo (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) ## adquirir un bloqueo en el dibujo del widget
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)
Crear la trama
Ahora, use la clase LassoManager para crear una trama interactiva. La función np.random.rand genera puntos de datos aleatorios que se graficarán.
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()
Resumen
En este laboratorio, aprendió a usar Matplotlib para crear una trama interactiva que le permite a los usuarios seleccionar un conjunto de puntos usando una herramienta de lasso. También aprendió a usar una función de devolución de llamada para cambiar el color de los puntos seleccionados. Esta funcionalidad se puede extender a otros proyectos que requieran la selección interactiva de datos.