我在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而不是清除图)。但是,无论该点是否存在,注释仍然保持原样。我如何删除它?
谢谢!
答案 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()