将点击事件添加到pyplot中的Annotation

时间:2016-12-11 12:35:08

标签: matplotlib annotations

我正在寻找一种方法来添加"点击"事件到matplotlib.pyplot中的注释以销毁它。相关代码:

import matplotlib.pyplot as plt
plt.ion()
plt.plot()
plt.annotate("Kill me",xy=(0,0))

现在我们需要找到注释,一种方法是迭代:

plt.gca().texts

虽然可能有更好的方法。到目前为止,我还没有找到如何使用它获取小部件/添加事件。这可能是使用mpl_connect图形画布的plt,但我不确定,这需要通过边界框,我想避免,但如果没有其他是解决方案是可以的。

1 个答案:

答案 0 :(得分:2)

您确实可以使用mpl_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()