Técnicas de visualización interactiva 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

Este laboratorio tiene como objetivo introducirte al concepto de selección en Matplotlib. La capacidad de seleccionar artistas es una herramienta poderosa que se puede utilizar para crear visualizaciones interactivas que responden a las acciones del usuario. Cubriremos selección simple, selección con funciones de prueba de coincidencia personalizadas, selección en un diagrama de dispersión y selección de imágenes.

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.

Selección simple, líneas, rectángulos y texto

Comenzaremos habilitando la selección simple estableciendo la propiedad "picker" de un artista. Esto permitirá que el artista lance un evento de selección si el evento del mouse se encuentra sobre el artista. Crearemos una trama simple que contenga una línea, un rectángulo y texto, y habilitaremos la selección en cada uno de estos artistas.

fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.set_title('click on points, rectangles or text', picker=True)
ax1.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red'))
line, = ax1.plot(rand(100), 'o', picker=True, pickradius=5)

## Pick the rectangle.
ax2.bar(range(10), rand(10), picker=True)
for label in ax2.get_xticklabels():  ## Make the xtick labels pickable.
    label.set_picker(True)

Creando una función de prueba de coincidencia personalizada

En este paso, definiremos un selector personalizado estableciendo picker en una función llamada. La función determinará si el artista es golpeado por el evento del mouse. Si el evento del mouse está sobre el artista, devolveremos hit=True y props es un diccionario de propiedades que desea agregar a los atributos de .PickEvent.

def line_picker(line, mouseevent):
    """
    Encuentra los puntos a una cierta distancia del clic del mouse en
    coordenadas de datos y adjunta algunos atributos adicionales, pickx y picky
    que son los puntos de datos que se seleccionaron.
    """
    if mouseevent.xdata is None:
        return False, dict()
    xdata = line.get_xdata()
    ydata = line.get_ydata()
    maxd = 0.05
    d = np.sqrt(
        (xdata - mouseevent.xdata)**2 + (ydata - mouseevent.ydata)**2)

    ind, = np.nonzero(d <= maxd)
    if len(ind):
        pickx = xdata[ind]
        picky = ydata[ind]
        props = dict(ind=ind, pickx=pickx, picky=picky)
        return True, props
    else:
        return False, dict()


def onpick2(event):
    print('onpick2 line:', event.pickx, event.picky)


fig, ax = plt.subplots()
ax.set_title('custom picker for line data')
line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker)
fig.canvas.mpl_connect('pick_event', onpick2)

Selección en un diagrama de dispersión

Un diagrama de dispersión está respaldado por una ~matplotlib.collections.PathCollection. Crearemos un diagrama de dispersión y habilitaremos la selección.

x, y, c, s = rand(4, 100)


def onpick3(event):
    ind = event.ind
    print('onpick3 scatter:', ind, x[ind], y[ind])


fig, ax = plt.subplots()
ax.scatter(x, y, 100*s, c, picker=True)
fig.canvas.mpl_connect('pick_event', onpick3)

Selección de imágenes

Las imágenes trazadas utilizando .Axes.imshow son objetos ~matplotlib.image.AxesImage. Crearemos una figura con múltiples imágenes y habilitaremos la selección.

fig, ax = plt.subplots()
ax.imshow(rand(10, 5), extent=(1, 2, 1, 2), picker=True)
ax.imshow(rand(5, 10), extent=(3, 4, 1, 2), picker=True)
ax.imshow(rand(20, 25), extent=(1, 2, 3, 4), picker=True)
ax.imshow(rand(30, 12), extent=(3, 4, 3, 4), picker=True)
ax.set(xlim=(0, 5), ylim=(0, 5))


def onpick4(event):
    artist = event.artist
    if isinstance(artist, AxesImage):
        im = artist
        A = im.get_array()
        print('onpick4 image', A.shape)


fig.canvas.mpl_connect('pick_event', onpick4)

Resumen

En este laboratorio, aprendimos cómo habilitar la selección en varios artistas en Matplotlib, incluyendo líneas, rectángulos, texto, diagramas de dispersión e imágenes. También aprendimos cómo definir funciones de prueba de coincidencia personalizadas para habilitar un comportamiento de selección más complejo. Esta herramienta poderosa nos permite crear visualizaciones interactivas que responden a las acciones del usuario.