def on_pick(self, event):
artist = event.artist
if not artist.get_visible():
return
for idx, artist_set in enumerate(self.pick_sets):
if artist in artist_set:
self.pick_funs[idx](artist)
return
if isinstance(artist, Line2D):
mevent = event.mouseevent
# figure out if we picked marker or line
self.drag_idx = self._get_idx_under_point(mevent)
if self.drag_idx >= 0:
# picked marker.
ax = mevent.inaxes
an, pt, _, _ = self.markers[self.drag_idx]
an.set_visible(False)
pt.set_visible(False)
self.canvas.draw()
self.markers[self.drag_idx][-1] = self.canvas.copy_from_bbox(ax.bbox)
an.set_visible(True)
pt.set_visible(True)
ax.draw_artist(an)
ax.draw_artist(pt)
self.canvas.blit(ax.bbox)
else:
# save data to plot marker later
mxval = mevent.xdata
button = mevent.button
if mxval is not None and button == 1 and not self.marker_line_info:
self.marker_line_info = (artist, mxval, mevent.ydata,
button, mevent.inaxes)
elif isinstance(artist, Annotation):
# delete marker.
mevent = event.mouseevent
if mevent.button == 3:
targ_idx = None
for idx, (an, pt, _, _) in enumerate(self.markers):
if an is artist:
targ_idx = idx
break
if targ_idx is not None:
an, pt, _, _ = self.markers[targ_idx]
del self.markers[targ_idx]
an.set_visible(False)
pt.set_visible(False)
self.canvas.draw()
评论列表
文章目录