Actualmente estoy empleando este código para tener anotaciones emergentes en un mapa cuando hago clic en un punto en un gráfico de Matplotlib del mapa base.Python y Matplotlib y anotaciones con Mouse Hover
dcc = DataCursor(self.figure.gca())
self.figure.canvas.mpl_connect('pick_event',dcc)
plot_handle.set_picker(5)
self.figure.canvas.draw()
class DataCursor(object):
import matplotlib.pyplot as plt
text_template = 'x: %0.2f\ny: %0.2f'
x, y = 0.0, 0.0
xoffset, yoffset = -20 , 20
text_template = 'A: %s\nB: %s\nC: %s'
def __init__(self, ax):
self.ax = ax
self.annotation = ax.annotate(self.text_template,
xy=(self.x, self.y), xytext=(0,0),
textcoords='axes fraction', ha='left', va='bottom', fontsize=10,
bbox=dict(boxstyle='round,pad=0.5', fc='yellow', alpha=1),
arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0')
)
self.annotation.set_visible(False)
self.annotation.draggable()
def __call__(self, event):
self.event = event
self.x, self.y = event.mouseevent.xdata, event.mouseevent.ydata
if self.x is not None:
glim = pickle.load(open("ListA.py","rb"))
tlim = pickle.load(open("ListB.py","rb"))
vlim = pickle.load(open("ListC.py","rb"))
a = glim[event.ind[0]] # ['Name'][event.ind[0]]
b = tlim[event.ind[0]]
c = vlim[event.ind[0]]
temp_temp=self.text_template % (a, b, c)
if temp_temp == self.annotation.get_text() and self.annotation.get_visible():
self.annotation.set_visible(False)
event.canvas.draw()
return
self.annotation.xy = self.x, self.y
self.annotation.set_text(self.text_template % (a, b, c))
self.annotation.set_visible(True)
event.canvas.draw()
Lo que estoy preguntando, es la forma de mostrar las anotaciones usando cursor del mouse en lugar de hacer clic en un punto?
He visto "motion_notify_event" pero parece que el código tiene errores cuando muevo el mouse por el área de trazado. ¿Alguna idea?
he visto estos dos enlaces, sin embargo, no estoy seguro de cómo implementarlos en mi formato actual. Tampoco veo cómo "pick_event" es una acción no clicable? – mcfly
acepto esta respuesta, pero no es la respuesta correcta. Sin embargo, Root vinculó otra pregunta que vinculaba esta [pregunta] (http://stackoverflow.com/questions/4453143/point-and-line-tooltips-in-matplotlib/4620352#4620352) que proporciona la forma correcta de desplazarse y mostrar anotaciones Nota: Todavía utilicé anotaciones en lugar de wx.tooltip. ¡Funciona muy bien! – mcfly