Dibujando Figuras con Widgets de 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

En este laboratorio, aprenderemos a usar los widgets RectangleSelector y EllipseSelector en Matplotlib para dibujar un rectángulo o una elipse desde la posición de clic inicial hasta la posición actual del mouse.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga 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 tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar las bibliotecas necesarias

Comenzaremos importando las bibliotecas necesarias: Matplotlib, Numpy y los widgets RectangleSelector y EllipseSelector.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import EllipseSelector, RectangleSelector

Definir la función de devolución de llamada de selección

La función de devolución de llamada de selección se llamará cada vez que el usuario seleccione un rectángulo o una elipse. La función recibirá los eventos de clic y liberación como argumentos y mostrará las coordenadas del rectángulo o la elipse.

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

Definir la función de selector de conmutación

La función de selector de conmutación se llamará cada vez que el usuario presione la tecla 't'. Esta función conmutará el estado activo de los widgets RectangleSelector y 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} desactivado.')
                selector.set_active(False)
            else:
                print(f'{name} activado.')
                selector.set_active(True)

Crear la figura y los subtramas

Crearemos una figura con dos subtramas, una para el RectangleSelector y otra para el EllipseSelector.

fig = plt.figure(layout='constrained')
axs = fig.subplots(2)

Graficar algo en los subtramas

Graficaremos algo en los subtramas para que el usuario pueda ver el efecto del RectangleSelector y del EllipseSelector.

N = 100000  ## Si N es grande, se puede ver una mejora al usar blitting.
x = np.linspace(0, 10, N)

for ax in axs:
    ax.plot(x, np.sin(2*np.pi*x))  ## grafica algo

Crear los widgets RectangleSelector y EllipseSelector

Crearemos los widgets RectangleSelector y EllipseSelector y los agregaremos a los subtramas.

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

Mostrar la gráfica

Finalmente, mostraremos la gráfica al usuario.

plt.show()

Resumen

En este laboratorio, aprendimos cómo usar los widgets RectangleSelector y EllipseSelector en Matplotlib para dibujar un rectángulo o una elipse desde la posición de clic inicial hasta la posición actual del mouse. También aprendimos cómo crear una figura con subtramas, graficar algo en las subtramas y alternar el estado activo de los widgets mediante un evento de pulsación de tecla.