Creando un espejo con Matplotlib

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica te guiará a través de la creación de un efecto de espejo retrovisor utilizando eventos del mouse en Matplotlib. Este ejemplo te permitirá inspeccionar datos en un área circular que se puede mover haciendo clic y arrastrando.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haz clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tengas que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tienes problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona retroalimentación después de la sesión y resolveremos rápidamente el problema para ti.

Importando las bibliotecas necesarias

Necesitamos importar la biblioteca Matplotlib, la biblioteca NumPy y el módulo de parches de Matplotlib. Utilizaremos estas bibliotecas para crear nuestro efecto de espejo retrovisor.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patches

Generando datos aleatorios

Generaremos dos conjuntos de datos aleatorios utilizando NumPy. Estos datos se graficarán para crear un diagrama de dispersión.

## Fixing random state for reproducibility
np.random.seed(19680801)

x, y = np.random.rand(2, 200)

Creando la figura y los ejes

Crearemos el objeto figura y los ejes utilizando la función subplots(). También agregaremos un parche de círculo amarillo al objeto de ejes utilizando la función patches.Circle().

fig, ax = plt.subplots()
circ = patches.Circle((0.5, 0.5), 0.25, alpha=0.8, fc='yellow')
ax.add_patch(circ)

Graficando los datos

Graficaremos los datos aleatorios generados en el Paso 2 utilizando la función plot() dos veces. La primera gráfica tendrá un valor de alfa de 0.2 y la segunda gráfica tendrá un valor de alfa de 1.0 y una ruta de recorte establecida en el parche de círculo amarillo.

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

Creando el manejador de eventos

Crearemos una clase de manejador de eventos que manejará los eventos del mouse necesarios para mover el parche de círculo amarillo alrededor de la gráfica. Esta clase contendrá tres métodos: on_press(), on_release() y 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()

Ejecutando el programa

Ejecute el programa y haga clic izquierdo y arrastre el parche de círculo amarillo para moverlo alrededor de la gráfica. Puede utilizar este efecto para inspeccionar los datos dentro del área circular.

Resumen

En este laboratorio, aprendimos cómo crear un efecto de lupa utilizando eventos del mouse en Matplotlib. Generamos datos aleatorios, graficamos los datos y creamos una clase de manejador de eventos para manejar los eventos del mouse. Al hacer clic izquierdo y arrastrar el parche de círculo amarillo, pudimos moverlo alrededor de la gráfica y inspeccionar los datos dentro del área circular.