我有几个数据系列分散在一个图中,并且希望能够为它们切换注释。问题是,有时会触发两个拾取事件(当用户单击注释和点内的点时)。 “注释”拾取事件会清除注释,但“点”拾取事件会将其放回原处,因此效果是切换不起作用。
df = pd.DataFrame({'a': np.random.rand(25)*1000,
'b': np.random.rand(25)*1000,
'c': np.random.rand(25)})
def handlepick(event):
artist = event.artist
if isinstance(artist, matplotlib.text.Annotation):
artist.set_visible(not artist.get_visible())
else:
x = event.mouseevent.xdata
y = event.mouseevent.ydata
if artist.get_label() == 'a':
ann = matplotlib.text.Annotation('blue', xy=(x,y), picker=5)
else: # label == 'b'
ann = matplotlib.text.Annotation('red', xy=(x,y), picker=5)
plt.gca().add_artist(ann)
plt.figure()
plt.scatter(data=df, x='a', y='c', c='blue', s='a', alpha=0.5, picker=5, label='a')
plt.scatter(data=df, x='b', y='c', c='red', s='b', alpha=0.5, picker=5, label='b')
plt.gcf().canvas.mpl_connect('pick_event', handlepick)
plt.show()
如何将注释和点选取事件分开,并告诉它不要注释(如果点已经有注释)?我已经使用标签来决定选择哪个散点系列。
非常感谢。