从图中Python和删除注释

时间:2012-08-31 21:00:05

标签: python annotations matplotlib

我在wxpython GUI中使用matplotlib。简而言之,我绘制了一堆数据。然后我点击一个数据点(使用DataCursor:

Is there a matplotlib equivalent of MATLAB's datacursormode?

Pop up annotations on matplotlib within wxPython

第二个链接是我的实际实现。我从其他类中重新编写datacursor类。我想知道,如何通过单击事件按钮删除注释?例如,我有一个事件按钮来更新我的散点图(通过使用plot_handle.set_data而不是清除图)。但是,无论该点是否存在,注释仍然保持原样。我如何删除它?

谢谢!

2 个答案:

答案 0 :(得分:7)

大多数matplotlib对象都有remove()函数(我认为它继承自Artist)。只需在要删除的对象上调用它即可。

编辑:

如果你有

dc = DataCursor(...) # what ever aruguements you give it
# bunch of code
dc.annotation.remove()
del dc
plt.draw() # need to redraw to make remove visible

Python没有“私有”属性的概念,所以你可以到达对象内部并在注释上调用remove。请参阅tutorial on classes for more details

这方面的缺点是,现在你有一个对象是一个奇怪的状态。如果您有任何其他引用,它们可能表现不佳。如果您想保留DataCursor对象,可以使用annotation函数修改set_*对象,或者更改其可见性以暂时隐藏它(doc

答案 1 :(得分:1)

您需要像艺术家一样添加它以像艺术家一样删除它

arrow2 = matplotlib.text.Annotation("I love it",xy=(0.5,0.5),xycoords='data',arrowprops=dict(arrowstyle="-")) 
ax2.add_artist(arrow2) 
arrow2.remove()