Introduction
Ce laboratoire vous guidera tout au long de la création d'un effet de miroir en utilisant des événements de souris dans Matplotlib. Cet exemple vous permettra d'inspecter les données dans une zone circulaire qui peut être déplacée en cliquant et en traînant.
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 de notes 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 requises
Nous devons importer la bibliothèque Matplotlib, la bibliothèque NumPy et le module Matplotlib patches. Nous utiliserons ces bibliothèques pour créer notre effet de miroir.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patches
Génération des données aléatoires
Nous allons générer deux ensembles de données aléatoires à l'aide de NumPy. Ces données seront tracées pour créer un nuage de points.
## Fixing random state for reproducibility
np.random.seed(19680801)
x, y = np.random.rand(2, 200)
Création de la figure et des axes
Nous allons créer l'objet figure et axes à l'aide de la fonction subplots(). Nous ajouterons également un patch de cercle jaune à l'objet axes à l'aide de la fonction patches.Circle().
fig, ax = plt.subplots()
circ = patches.Circle((0.5, 0.5), 0.25, alpha=0.8, fc='yellow')
ax.add_patch(circ)
Traçage des données
Nous allons tracer les données aléatoires générées dans l'Étape 2 à l'aide de la fonction plot() deux fois. Le premier tracé aura une valeur d'alpha de 0,2 et le second tracé aura une valeur d'alpha de 1,0 et une zone de découpe définie sur le patch de cercle jaune.
ax.plot(x, y, alpha=0.2)
line, = ax.plot(x, y, alpha=1.0, clip_path=circ)
ax.set_title("Left click and drag to move looking glass")
Création du gestionnaire d'événements
Nous allons créer une classe de gestionnaire d'événements qui gérera les événements de souris nécessaires pour déplacer le patch de cercle jaune autour du tracé. Cette classe contiendra trois méthodes : on_press(), on_release() et on_move().
class EventHandler:
def __init__(self):
fig.canvas.mpl_connect('button_press_event', self.on_press)
fig.canvas.mpl_connect('button_release_event', self.on_release)
fig.canvas.mpl_connect('motion_notify_event', self.on_move)
self.x0, self.y0 = circ.center
self.pressevent = None
def on_press(self, event):
if event.inaxes!= ax:
return
if not circ.contains(event)[0]:
return
self.pressevent = event
def on_release(self, event):
self.pressevent = None
self.x0, self.y0 = circ.center
def on_move(self, event):
if self.pressevent is None or event.inaxes!= self.pressevent.inaxes:
return
dx = event.xdata - self.pressevent.xdata
dy = event.ydata - self.pressevent.ydata
circ.center = self.x0 + dx, self.y0 + dy
line.set_clip_path(circ)
fig.canvas.draw()
handler = EventHandler()
plt.show()
Exécution du programme
Exécutez le programme et cliquez avec le bouton gauche de la souris puis faites glisser le patch de cercle jaune pour le déplacer autour du tracé. Vous pouvez utiliser cet effet pour examiner les données à l'intérieur de la zone circulaire.
Sommaire
Dans ce laboratoire, nous avons appris à créer un effet de miroir utilisant des événements de souris dans Matplotlib. Nous avons généré des données aléatoires, tracé les données et créé une classe de gestionnaire d'événements pour gérer les événements de souris. En cliquant avec le bouton gauche de la souris et en faisant glisser le patch de cercle jaune, nous avons pu le déplacer autour du tracé et examiner les données à l'intérieur de la zone circulaire.