Démonstration de Lasso avec Matplotlib

Beginner

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

Introduction

Dans ce laboratoire, vous allez apprendre à utiliser la bibliothèque Matplotlib pour créer un graphique interactif qui permet aux utilisateurs de sélectionner un ensemble de points à l'aide d'un outil de lasso. Vous allez également apprendre à utiliser une fonction de rappel pour changer la couleur des points sélectionnés.

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 Notebook pour accéder à Jupyter Notebook pour la pratique.

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

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

Tout d'abord, importez les bibliothèques nécessaires pour le laboratoire. Nous allons utiliser matplotlib pour créer le graphique et numpy pour générer des données aléatoires.

import matplotlib.pyplot as plt
import numpy as np

Créer la classe LassoManager

Ensuite, créez la classe LassoManager qui gérera la fonctionnalité du lasso. La méthode __init__ initialise l'objet de tracé et de collection. La méthode callback change la couleur des points sélectionnés, et les méthodes on_press et on_release gèrent les événements de souris.

class LassoManager:
    def __init__(self, ax, data):
        ## L'information sur le fait qu'un point a été sélectionné ou non est stockée dans le
        ## tableau de la collection (0 = hors, 1 = dans), qui est ensuite coloré en bleu
        ## (hors) et en rouge (dans).
        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)  ## acquérir un verrou sur le dessin du 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)

Créer le graphique

Maintenant, utilisez la classe LassoManager pour créer un graphique interactif. La fonction np.random.rand génère des points de données aléatoires qui seront tracés.

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()

Sommaire

Dans ce laboratoire, vous avez appris à utiliser Matplotlib pour créer un graphique interactif qui permet aux utilisateurs de sélectionner un ensemble de points à l'aide d'un outil de lasso. Vous avez également appris à utiliser une fonction de rappel pour changer la couleur des points sélectionnés. Cette fonctionnalité peut être étendue à d'autres projets qui nécessitent une sélection de données interactive.