4

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

是否有相当于 MATLAB 的 datacursormode 的 matplotlib?

或者

在 wxPython 中的 matplotlib 上弹出注释

第二个链接是我的实际实现。我从其他类中重新定义了 datacursor 类。我想知道,如何通过单击事件按钮来删除注释?例如,我有一个更新我的散点图的事件按钮(通过使用 plot_handle.set_data 而不是通过清除图形)。但是,无论该点是否存在,注释都会准确地保留在原来的位置。我该如何删除它?

谢谢!

4

2 回答 2

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。有关更多详细信息,请参阅有关课程的教程

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

于 2012-08-31T21:19:32.287 回答
1

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

arrow2 = matplotlib.text.Annotation("I love it",xy=(0.5,0.5),xycoords='data',arrowprops=dict(arrowstyle="-")) 
ax2.add_artist(arrow2) 
arrow2.remove() 
于 2013-09-04T21:52:44.627 回答