Elija el número de demostración del evento

Puede habilitar la selección configurando la propiedad "selector" de un artista (por ejemplo, Matplotlib Line2D, Text, Patch, Polygon, AxesImage, etc.)

Hay una variedad de significados de la propiedad del selector:

  • Ninguno : la selección está deshabilitada para este artista (predeterminado)

  • bool: si es verdadero , se habilitará la selección y el artista activará un evento de selección si el evento del mouse está sobre el artista.

    La configuración pickradiusagregará una tolerancia épsilon en puntos y el artista disparará un evento si sus datos están dentro del épsilon del evento del mouse. Para algunos artistas, como líneas y colecciones de parches, el artista puede proporcionar datos adicionales al evento de selección que se genera, por ejemplo, los índices de los datos dentro de épsilon del evento de selección.

  • función: si se puede llamar al selector, es una función proporcionada por el usuario que determina si el evento del mouse golpea al artista.

    hit, props = picker(artist, mouseevent)
    

    para determinar la prueba de impacto. Si el evento del mouse está sobre el artista, devuelva hit=True y props es un diccionario de propiedades que desea agregar a los atributos de PickEvent.

Una vez que haya habilitado a un artista para elegir configurando la propiedad "selector", debe conectarse al lienzo de la figura pick_event para obtener devoluciones de llamada de selección en eventos de presión del mouse. Por ejemplo,

def pick_handler(event):
    mouseevent = event.mouseevent
    artist = event.artist
    # now do something with this...

El evento de selección (matplotlib.backend_bases.PickEvent) que se pasa a su devolución de llamada siempre se activa con dos atributos:

evento del ratón

el evento del mouse que genera el evento de selección.

El evento del mouse, a su vez, tiene atributos como x e y (las coordenadas en el espacio de visualización, como píxeles desde la izquierda, abajo) y xdata, ydata (las coordenadas en el espacio de datos). Además, puede obtener información sobre qué botones se presionaron, qué teclas se presionaron, sobre qué ejes se encuentra el mouse, etc. Consulte matplotlib.backend_bases.MouseEvent para obtener más información.

artista

el matplotlib.artist que generó el evento de selección.

Además, ciertos artistas como Line2D y PatchCollection pueden adjuntar metadatos adicionales como los índices a los datos que cumplen con los criterios del selector (por ejemplo, todos los puntos en la línea que están dentro de la tolerancia épsilon especificada)

Los ejemplos siguientes ilustran cada uno de estos métodos.

Nota

Estos ejemplos ejercitan las capacidades interactivas de Matplotlib, y esto no aparecerá en la documentación estática. Ejecute este código en su máquina para ver la interactividad.

Puede copiar y pegar partes individuales o descargar el ejemplo completo usando el enlace en la parte inferior de la página.

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
from matplotlib.patches import Rectangle
from matplotlib.text import Text
from matplotlib.image import AxesImage
import numpy as np
from numpy.random import rand


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

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

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)


def onpick1(event):
    if isinstance(event.artist, Line2D):
        thisline = event.artist
        xdata = thisline.get_xdata()
        ydata = thisline.get_ydata()
        ind = event.ind
        print('onpick1 line:', np.column_stack([xdata[ind], ydata[ind]]))
    elif isinstance(event.artist, Rectangle):
        patch = event.artist
        print('onpick1 patch:', patch.get_path())
    elif isinstance(event.artist, Text):
        text = event.artist
        print('onpick1 text:', text.get_text())


fig.canvas.mpl_connect('pick_event', onpick1)
haga clic en puntos, rectángulos o texto
11

Selección con una función de prueba de acierto personalizada #

Puede definir selectores personalizados configurando selector en una función invocable. La función tiene la firma:

hit, props = func(artist, mouseevent)

para determinar la prueba de impacto. Si el evento del mouse está sobre el artista, regrese hit=Truey propses un diccionario de propiedades que desea agregar a los PickEventatributos.

def line_picker(line, mouseevent):
    """
    Find the points within a certain distance from the mouseclick in
    data coords and attach some extra attributes, pickx and picky
    which are the data points that were picked.
    """
    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)
selector personalizado para datos de línea
11

Seleccionando un gráfico de dispersión #

Un gráfico de dispersión está respaldado por un PathCollection.

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)
elegir demostración de evento
11

Recogiendo imágenes #

Las imágenes trazadas usando Axes.imshowson AxesImage objetos.

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)

plt.show()
elegir demostración de evento

Tiempo total de ejecución del script: (0 minutos 1.456 segundos)

Galería generada por Sphinx-Gallery