matplotlib - интерактивно выбирать точки или места? - PullRequest
15 голосов
/ 01 ноября 2011

В R есть функция locator, которая похожа на ginput в Matlab, где вы можете щелкнуть мышью по фигуре и выбрать любую координату x, y. Кроме того, есть функция с именем identify(x,y), где, если вы дадите ей набор точек x, y, которые вы нанесли на график, а затем нажмете на фигуру, она вернет индекс точки x, y, которая находится ближе всего (в пределах настраиваемый допуск) к выбранному вами месту (или нескольким индексам, если выбрано несколько точек). Есть ли такая функциональность в Matplotlib?

Ответы [ 2 ]

15 голосов
/ 01 ноября 2011

Вы можете использовать событие выбора :

fig = figure()
ax1 = fig.add_subplot(111)
ax1.set_title('custom picker for line data')
line, = ax1.plot(rand(100), rand(100), 'o', picker=line_picker)
fig.canvas.mpl_connect('pick_event', onpick2)

Допуск, установленный параметром выбора там:

line, = ax1.plot(rand(100), 'o', picker=5)  # 5 points tolerance
6 голосов
/ 17 февраля 2014
from __future__ import print_function
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

if 1:
    fig, ax = plt.subplots()
    ax.set_title('click on points', picker=True)
    ax.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red'))
    line, = ax.plot(rand(100), 'o', picker=5)

    def onpick1(event):
        if isinstance(event.artist, Line2D):
            thisline = event.artist
            xdata = thisline.get_xdata()
            ydata = thisline.get_ydata()
            ind = event.ind
            print 'X='+str(np.take(xdata, ind)[0]) # Print X point
            print 'Y='+str(np.take(ydata, ind)[0]) # Print Y point

    fig.canvas.mpl_connect('pick_event', onpick1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...