Création d'un miroir avec 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

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.