Escolha a demonstração do evento #

Você pode ativar a seleção definindo a propriedade "seletor" de um artista (por exemplo, um Matplotlib Line2D, Text, Patch, Polygon, AxesImage, etc.)

Há uma variedade de significados da propriedade picker:

  • Nenhum - a seleção está desativada para este artista (padrão)

  • bool - se True , a seleção será ativada e o artista disparará um evento de seleção se o evento do mouse estiver sobre o artista.

    A configuração pickradiusadicionará uma tolerância epsilon em pontos e o artista disparará um evento se seus dados estiverem dentro do epsilon do evento do mouse. Para alguns artistas, como linhas e coleções de patch, o artista pode fornecer dados adicionais para o evento pick que é gerado, por exemplo, os índices dos dados dentro do epsilon do evento pick

  • função - se o seletor for chamado, é uma função fornecida pelo usuário que determina se o artista é atingido pelo evento do mouse.

    hit, props = picker(artist, mouseevent)
    

    para determinar o teste de acerto. Se o evento do mouse estiver sobre o artista, retorne hit=True e props é um dicionário de propriedades que você deseja adicionar aos atributos PickEvent.

Depois de habilitar um artista para seleção definindo a propriedade "picker", você precisa se conectar à tela da figura pick_event para obter retornos de chamada de seleção em eventos de pressionamento do mouse. Por exemplo,

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

O evento pick (matplotlib.backend_bases.PickEvent) que é passado para seu retorno de chamada é sempre disparado com dois atributos:

evento do mouse

o evento do mouse que gera o evento pick.

O evento do mouse, por sua vez, possui atributos como x e y (as coordenadas no espaço de exibição, como pixels da esquerda, inferior) e xdata, ydata (as coordenadas no espaço de dados). Além disso, você pode obter informações sobre quais botões foram pressionados, quais teclas foram pressionadas, quais eixos o mouse está sobre, etc. Consulte matplotlib.backend_bases.MouseEvent para obter detalhes.

artista

o matplotlib.artist que gerou o evento pick.

Além disso, certos artistas como Line2D e PatchCollection podem anexar metadados adicionais como os índices nos dados que atendem aos critérios do seletor (por exemplo, todos os pontos na linha que estão dentro da tolerância epsilon especificada)

Os exemplos abaixo ilustram cada um desses métodos.

Observação

Esses exemplos exercitam os recursos interativos do Matplotlib e isso não aparecerá na documentação estática. Por favor, execute este código em sua máquina para ver a interatividade.

Você pode copiar e colar partes individuais ou baixar o exemplo inteiro usando o link na parte inferior da 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)

Seleção simples, linhas, retângulos e 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)
clique em pontos, retângulos ou texto
11

Seleção com uma função de teste de clique personalizada #

Você pode definir seletores personalizados definindo o seletor como uma função chamável. A função tem a assinatura:

hit, props = func(artist, mouseevent)

para determinar o teste de acerto. Se o evento do mouse estiver sobre o artista, retorne hit=Truee propsseja um dicionário de propriedades que você deseja adicionar aos 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)
seletor personalizado para dados de linha
11

Escolhendo um gráfico de dispersão #

Um gráfico de dispersão é apoiado por um arquivo 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)
escolher demonstração do evento
11

Escolhendo imagens #

Imagens plotadas usando Axes.imshowsão 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()
escolher demonstração do evento

Tempo total de execução do script: ( 0 minutos 1,456 segundos)

Galeria gerada por Sphinx-Gallery