Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matplotlib 向pyplot中的批注添加单击事件_Matplotlib_Annotations - Fatal编程技术网

Matplotlib 向pyplot中的批注添加单击事件

Matplotlib 向pyplot中的批注添加单击事件,matplotlib,annotations,Matplotlib,Annotations,我正在寻找一种方法,向matplotlib.pyplot中的注释添加一个“点击”事件来销毁它。有关守则: import matplotlib.pyplot as plt plt.ion() plt.plot() plt.annotate("Kill me",xy=(0,0)) 现在我们需要找到注释,一种方法是迭代: plt.gca().texts 尽管可能有更好的办法。到目前为止,我还没有找到如何获取小部件/添加具有此功能的事件。使用plt图形画布的mpl\u connect可以实现这一点,

我正在寻找一种方法,向
matplotlib.pyplot
中的注释添加一个“点击”事件来销毁它。有关守则:

import matplotlib.pyplot as plt
plt.ion()
plt.plot()
plt.annotate("Kill me",xy=(0,0))
现在我们需要找到注释,一种方法是迭代:

plt.gca().texts
尽管可能有更好的办法。到目前为止,我还没有找到如何获取小部件/添加具有此功能的事件。使用
plt
图形画布的
mpl\u connect
可以实现这一点,但我不确定,这需要使用边界框,我希望避免使用边界框,但如果没有其他可用的解决方案,就可以了。

您确实可以使用将选择器事件连接到画布中的对象。在这种情况下,对
annotate
的调用可以给出一个
picker
参数,该参数指定应该触发事件的对象周围的半径

然后,您可以直接操作触发事件的对象,该对象在事件槽中作为
event.artist
提供

import matplotlib.pyplot as plt

fig = plt.figure()
ax=fig.add_subplot(111)
plt.plot([0,5],[0,6], alpha=0)
plt.xlim([-1,6])
plt.ylim([-1,6])

for i in range(6):
    for j in range(6):
        an = plt.annotate("Kill me",xy=(j,i), picker=5)


def onclick(event):
    event.artist.set_text("I'm killed")
    event.artist.set_color("g")
    event.artist.set_rotation(20)
    # really kill the text (but too boring for this example;-) )
    #event.artist.set_visible(False) 
    # or really REALLY kill it with:
    #event.artist.remove()
    fig.canvas.draw()


cid = fig.canvas.mpl_connect('pick_event', onclick)

plt.show()

令人惊叹的!您能否澄清
选择器
标志的含义?据我所知,使用“pick_事件”需要一个正整数,但为什么是5?此外,我还添加了一个轻微的更新。NM在文档中了解到了这一点。不过,我建议您添加它以供将来参考。再次感谢!编辑批准。
picker
参数指定应该触发事件的对象周围的半径,但也可以简单地设置为
1
True
(这是相等的)。