Tracer des formes avec des widgets Matplotlib

PythonPythonBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons apprendre à utiliser les widgets RectangleSelector et EllipseSelector dans Matplotlib pour tracer un rectangle ou une ellipse depuis la position de clic initiale jusqu'à la position actuelle de la souris.

Conseils sur la VM

Une fois le démarrage de la VM 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.

Importez les bibliothèques nécessaires

Nous allons commencer par importer les bibliothèques nécessaires : Matplotlib, Numpy, et les widgets RectangleSelector et EllipseSelector.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import EllipseSelector, RectangleSelector

Définissez la fonction de rappel de sélection

La fonction de rappel de sélection sera appelée chaque fois que l'utilisateur sélectionne un rectangle ou une ellipse. La fonction recevra les événements de clic et de relâchement en tant qu'arguments et affichera les coordonnées du rectangle ou de l'ellipse.

def select_callback(eclick, erelease):
    """
    Callback for line selection.

    *eclick* and *erelease* are the press and release events.
    """
    x1, y1 = eclick.xdata, eclick.ydata
    x2, y2 = erelease.xdata, erelease.ydata
    print(f"({x1:3.2f}, {y1:3.2f}) --> ({x2:3.2f}, {y2:3.2f})")
    print(f"The buttons you used were: {eclick.button} {erelease.button}")

Définissez la fonction de basculement du sélecteur

La fonction de basculement du sélecteur sera appelée chaque fois que l'utilisateur appuie sur la touche 't'. Cette fonction basculera l'état actif des widgets RectangleSelector et EllipseSelector.

def toggle_selector(event):
    print('Key pressed.')
    if event.key == 't':
        for selector in selectors:
            name = type(selector).__name__
            if selector.active:
                print(f'{name} désactivé.')
                selector.set_active(False)
            else:
                print(f'{name} activé.')
                selector.set_active(True)

Créez la figure et les sous-graphiques

Nous allons créer une figure avec deux sous-graphiques, l'un pour le RectangleSelector et l'autre pour l'EllipseSelector.

fig = plt.figure(layout='constrained')
axs = fig.subplots(2)

Tracez quelque chose sur les sous-graphiques

Nous allons tracer quelque chose sur les sous-graphiques afin que l'utilisateur puisse voir l'effet du RectangleSelector et de l'EllipseSelector.

N = 100000  ## If N is large one can see improvement by using blitting.
x = np.linspace(0, 10, N)

for ax in axs:
    ax.plot(x, np.sin(2*np.pi*x))  ## plot something

Créez les widgets RectangleSelector et EllipseSelector

Nous allons créer les widgets RectangleSelector et EllipseSelector et les ajouter aux sous-graphiques.

selectors = []
for ax, selector_class in zip(axs, [RectangleSelector, EllipseSelector]):
    ax.set_title(f"Click and drag to draw a {selector_class.__name__}.")
    selectors.append(selector_class(
        ax, select_callback,
        useblit=True,
        button=[1, 3],  ## disable middle button
        minspanx=5, minspany=5,
        spancoords='pixels',
        interactive=True))
    fig.canvas.mpl_connect('key_press_event', toggle_selector)
axs[0].set_title("Press 't' to toggle the selectors on and off.\n"
                 + axs[0].get_title())

Affichez le tracé

Enfin, nous allons afficher le tracé à l'utilisateur.

plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser les widgets RectangleSelector et EllipseSelector dans Matplotlib pour tracer un rectangle ou une ellipse depuis la position de clic initiale jusqu'à la position actuelle de la souris. Nous avons également appris à créer une figure avec des sous-graphiques, à tracer quelque chose sur les sous-graphiques et à basculer l'état actif des widgets en utilisant un événement de pression de touche.