Ich verwende diesen Code derzeit, um Popup-Annotationen auf einer Karte zu haben, wenn ich auf einen Punkt in einem Grundkarten-Matplotlib-Plot klicke.Python und Matplotlib und Anmerkungen mit 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()
Was ich frage mich, ist, wie die Anmerkungen zeigen Mausbewegung mit, anstatt auf einen Punkt klicken?
Ich habe "motion_notify_event" gesehen, aber es scheint, dass der Code Fehler bekommt, wenn ich die Maus um den Plotbereich bewege. Irgendwelche Gedanken?
Ich habe beide Links gesehen, aber ich bin mir nicht sicher, wie ich sie in meinem aktuellen Format implementiere. Ich sehe auch nicht, wie "pick_event" eine nicht anklickbare Aktion ist? – mcfly
Ich akzeptiere diese Antwort, aber es ist nicht die richtige Antwort. Allerdings hat Root eine andere Frage verlinkt, die diese [Frage] verlinkt (http://stackoverflow.com/questions/4453143/point-and-line-tooltips-in-matplotlib/4620352#4620352), die den richtigen Weg gibt, um zu schweben und anzuzeigen Anmerkungen. Hinweis: Ich habe immer noch Anmerkungen anstelle von wx.tooltip verwendet. Es funktioniert sehr gut! – mcfly