Demo de Lasso en Matplotlib

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.