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.