Démonstration du sélecteur Lasso Sgskip

Beginner

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

Introduction

Dans ce laboratoire, vous allez apprendre à sélectionner de manière interactive des points de données avec l'outil lasso à l'aide de Python Matplotlib. Vous allez tracer un graphique en nuage de points puis sélectionner quelques points en traçant une boucle lasso autour des points sur le graphique. Pour tracer, cliquez simplement sur le graphique, maintenez le clic et faites glisser le curseur autour des points que vous devez sélectionner.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet d'étude pour accéder au carnet Jupyter pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session et nous résoudrons rapidement le problème pour vous.

Importation des bibliothèques

Importer les bibliothèques nécessaires, y compris numpy, Path et LassoSelector.

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

Créer la classe Sélecteur

Créez la classe SelectFromCollection qui sélectionnera des indices à partir d'une collection Matplotlib en utilisant LassoSelector.

class SelectFromCollection:
    """
    Sélectionnez des indices à partir d'une collection matplotlib en utilisant `LassoSelector`.

    Les indices sélectionnés sont enregistrés dans l'attribut `ind`. Cet outil assombrit les
    points qui ne font pas partie de la sélection (c'est-à-dire réduit leurs valeurs d'alpha).
    Si votre collection a un alpha < 1, cet outil modifiera définitivement les valeurs d'alpha.

    Notez que cet outil sélectionne les objets de collection en fonction de leurs *origine*
    (c'est-à-dire `offsets`).

    Paramètres
    ----------
    ax : `~matplotlib.axes.Axes`
        Axes avec lequel interagir.
    collection : `matplotlib.collections.Collection` sous-classe
        Collection à partir de laquelle vous voulez sélectionner.
    alpha_other : 0 <= float <= 1
        Pour mettre en évidence une sélection, cet outil définit tous les points sélectionnés
        à une valeur d'alpha de 1 et les points non sélectionnés à *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)

        ## Assurez-vous d'avoir des couleurs distinctes pour chaque objet
        self.fc = collection.get_facecolors()
        if len(self.fc) == 0:
            raise ValueError('La collection doit avoir une couleur de face')
        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()

Créer le graphique en nuage de points

Créez un graphique en nuage de points à l'aide de données générées aléatoirement.

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)

Accepter les points sélectionnés

Acceptez les points sélectionnés en utilisant la touche Entrée et affichez-les dans la console.

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

fig.canvas.mpl_connect("key_press_event", accept)
ax.set_title("Appuyez sur Entrée pour accepter les points sélectionnés.")

plt.show()

Sommaire

Dans ce laboratoire, vous avez appris à sélectionner de manière interactive des points de données avec l'outil Lasso à l'aide de Python Matplotlib. Vous avez créé un graphique en nuage de points, sélectionné quelques points en traçant une boucle Lasso autour des points sur le graphique, puis accepté les points sélectionnés en utilisant la touche Entrée.