Attualmente sto utilizzando questo codice per avere annotazioni popup su una mappa quando faccio clic su un punto in un plotter Basemap Matplotlib.Python e Matplotlib e annotazioni con passaggio del mouse
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()
Quello che mi chiedo, è come mostrare le annotazioni utilizzando passaggio del mouse, piuttosto che cliccando su un punto?
Ho visto "motion_notify_event" ma sembra che il codice ottenga degli errori quando sposto il mouse intorno all'area del tracciato. Qualche idea?
ho visto entrambi questi collegamenti, tuttavia non sono sicuro di come implementarli nel mio formato corrente. Inoltre, non vedo come "pick_event" sia un'azione non selezionabile? – mcfly
accetto questa risposta, ma non è la risposta giusta. Tuttavia, Root collegava un'altra domanda che collegava questa [domanda] (http://stackoverflow.com/questions/4453143/point-and-line-tooltips-in-matplotlib/4620352#4620352) che fornisce il modo corretto di passare il mouse e visualizzare annotazioni. Nota: ho usato ancora annotazioni al posto di wx.tooltip. Funziona molto bene! – mcfly