Demostración del selector de lasso Sgskip

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 seleccionar puntos de datos de manera interactiva con la herramienta de lasso utilizando Python Matplotlib. Creará un diagrama de dispersión y luego seleccionará algunos puntos dibujando un bucle de lasso alrededor de los puntos en el gráfico. Para dibujar, haga clic en el gráfico, mantenga presionado el botón y arrástrelo alrededor de los puntos que necesita seleccionar.

Consejos sobre la VM

Una vez que se haya iniciado 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 las 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

Importe las bibliotecas necesarias, incluyendo numpy, Path y LassoSelector.

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

Crear la clase Selector

Crea la clase SelectFromCollection que seleccionará índices de una colección de Matplotlib utilizando LassoSelector.

class SelectFromCollection:
    """
    Selecciona índices de una colección de matplotlib utilizando `LassoSelector`.

    Los índices seleccionados se guardan en el atributo `ind`. Esta herramienta desvanece los
    puntos que no forman parte de la selección (es decir, reduce sus valores de alfa).
    Si su colección tiene un alfa < 1, esta herramienta modificará permanentemente
    los valores de alfa.

    Tenga en cuenta que esta herramienta selecciona objetos de colección basados en sus *orígenes*
    (es decir, `offsets`).

    Parámetros
    ----------
    ax : `~matplotlib.axes.Axes`
        Ejes con los que interactuar.
    collection : `matplotlib.collections.Collection` subclase
        Colección de la que desea seleccionar.
    alpha_other : 0 <= float <= 1
        Para resaltar una selección, esta herramienta establece todos los puntos seleccionados
        a un valor de alfa de 1 y los puntos no seleccionados a *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)

        ## Asegúrese de que tengamos colores separados para cada objeto
        self.fc = collection.get_facecolors()
        if len(self.fc) == 0:
            raise ValueError('La colección debe tener un color de cara')
        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()

Crear el diagrama de dispersión

Crea un diagrama de dispersión utilizando datos generados 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)

Aceptar los puntos seleccionados

Acepte los puntos seleccionados utilizando la tecla enter y muéstrelos en la consola.

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

fig.canvas.mpl_connect("key_press_event", accept)
ax.set_title("Presione enter para aceptar los puntos seleccionados.")

plt.show()

Resumen

En este laboratorio, aprendiste cómo seleccionar puntos de datos de manera interactiva con la herramienta de lasso utilizando Python y Matplotlib. Creaste un diagrama de dispersión, seleccionaste algunos puntos dibujando un bucle de lasso alrededor de los puntos en el gráfico y luego aceptaste los puntos seleccionados utilizando la tecla enter.