Определить относительное положение мыши на холсте matplotlib - PullRequest
6 голосов
/ 28 ноября 2011

Я хочу создать пользовательское действие при наведении курсора в matplotlib, используя функцию onmove ниже. Каков наилучший способ преобразования существующих значений точек данных в x и event.x в другую систему координат, такую ​​как точки, чтобы я мог определить, когда event.x находится в пределах p точек любой точки данных? Мне известно о событии выбора, но я не хочу его использовать, поскольку оно основано на щелчке, а не наведении курсора.

fig = figure()
ax1 = subplot(111)
x = linspace(0,10,11)
y = x**2
ax1.plot(x,y)
fig.canvas.mpl_connect('motion_notify_event', onmove)
p = 5

def onmove(event):
    if event.inaxes:
    #Detect if mouse was moved within p points of any value in x

1 Ответ

3 голосов
/ 21 июля 2012

Я ответил на вопрос, связанный с , на днях .

Ваше преобразование координат "точек" (или устройства) зависит от исходной системы координат x и y.Если (x, y) - значения данных на осях, ax, то вы можете преобразовать их с помощью ax.transData.transform_point([x, y]).Если (x, y) находятся в координатах осей (0-1), то ax.transAxes - это то, что вам нужно.

События, которые получает onmove, будут иметь атрибуты x и y, которые будуткоординаты (x, y) в устройстве (пиксели)

Соответствующую документацию для этой информации можно найти: http://matplotlib.sourceforge.net/users/transforms_tutorial.html и http://matplotlib.sourceforge.net/users/event_handling.html

Дополнительно исполнители (линии, патчи)и т.д.) есть метод содержимого, который может вас заинтересовать: http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.artist.Artist.contains.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...