gpt4 book ai didi

python - 多个拾取事件干扰

转载 作者:行者123 更新时间:2023-11-28 17:18:02 24 4
gpt4 key购买 nike

我有几个数据系列分散在一个图中,希望能够为它们切换注释。问题是,有时会触发两个拾取事件(当用户单击同时位于注释和点内的点时)。 “annotation”选择事件清除了注释,但“dot”选择事件将它放回原处,所以效果是切换不起作用。

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()

如果点已经有注释,我如何分离注释和点选择事件并告诉它不要注释?我已经在使用标签来决定选择哪个散点系列。

非常感谢。

最佳答案

您可以预先为每个散点创建一个注释并将所有这些设置为不可见。单击散点将切换相应注释的可见性。单击注释将不会执行任何操作。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

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
lab = artist.get_label()
if lab in d:
for ind in event.ind:
ann = d[lab][ind]
ann.set_visible(not ann.get_visible() )
plt.gcf().canvas.draw()


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')

d = {"a" : [], "b": []}
for i in range(len(df)):
ann = plt.annotate("blue", xy=(df["a"].iloc[i], df["c"].iloc[i]), visible=False)
d["a"].append(ann)
ann = plt.annotate("red", xy=(df["b"].iloc[i], df["c"].iloc[i]), visible=False)
d["b"].append(ann)
plt.gcf().canvas.mpl_connect('pick_event', handlepick)
plt.show()

关于python - 多个拾取事件干扰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43069007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com