2011-11-28 20 views
5

Deseo crear una acción de desplazamiento manual personalizada en matplotlib utilizando la función onmove onmove a continuación. ¿Cuál es la mejor manera de convertir los valores de datapoint existentes en x y event.x a otro sistema de coordenadas como puntos para que pueda detectar cuando está dentro de event.x p puntos de cualquier punto de datos? Soy consciente del evento selector, pero no quiero usar esto, ya que se basa en un clic, no en un vuelo estacionario.Detectar la posición relativa del mouse en el lienzo matplotlib

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 

Respuesta

3

Respondí related question the other day.

La conversión de coordenadas de "puntos" (o dispositivo) depende del sistema de coordenadas original de xey. Si (x, y) son valores de datos en un eje, ax, puede convertirlos con ax.transData.transform_point([x, y]). Si (x, y) están en las coordenadas de los ejes (0-1), entonces lo que está buscando es ax.transAxes.

Los eventos que OnMove reciba tendrá atributos de x y y que será el (x, y) en el dispositivo (píxel) coordina

La documentación pertinente para que esta información se puede encontrar: http://matplotlib.sourceforge.net/users/transforms_tutorial.html y http://matplotlib.sourceforge.net/users/event_handling.html

Además, los artistas (líneas, parches, etc.) tienen un método de contenido que puede ser de su interés: http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.artist.Artist.contains.

Cuestiones relacionadas