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.