Python 如何删除Matplolib中鼠标悬停事件创建的打印线?

Python 如何删除Matplolib中鼠标悬停事件创建的打印线?,python,matplotlib,Python,Matplotlib,我用鼠标悬停事件在绘图中创建了一条垂直线和一条水平线。这些线条旨在帮助用户选择在绘图中单击的位置。 我的问题是,当鼠标移动到绘图上时,先前绘制的线不会消失。 有人能告诉我怎么做吗? 在OnOver函数中绘制绘图之后,我使用了ax.lines.pop(),但这不起作用 这是我正在使用的代码 from matplotlib import pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(111) ax.

我用鼠标悬停事件在绘图中创建了一条垂直线和一条水平线。这些线条旨在帮助用户选择在绘图中单击的位置。 我的问题是,当鼠标移动到绘图上时,先前绘制的线不会消失。 有人能告诉我怎么做吗?
在OnOver函数中绘制绘图之后,我使用了ax.lines.pop(),但这不起作用

这是我正在使用的代码

from matplotlib import pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.random.rand(10))


def OnClick(event):
    print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
        event.button, event.x, event.y, event.xdata, event.ydata)

def OnOver(event):
    x = event.xdata
    y = event.ydata
    ax.axhline(y)
    ax.axvline(x)
    plt.draw()  


did = fig.canvas.mpl_connect('motion_notify_event', OnOver)   
#iii = fig.canvas.mpl_disconnect(did) # get rid of the click-handler
cid = fig.canvas.mpl_connect('button_press_event', OnClick)

plt.show()
提前感谢你的帮助。
Ivo

您需要删除不需要的行。比如说

def OnOver(event):
   if len(ax.lines) > 1 :
      ax.lines[-1].remove()
      ax.lines[-1].remove()
   ax.axhline(event.ydata)
   ax.axvline(event.xdata)
   plt.draw()
这既不稳健也不高效。

我们可以只画一次线并不断更新,而不是不断地创建和破坏线

lhor = ax.axhline (0.5)
lver = ax.axvline (1)
def OnOver2(event):
   lhor.set_ydata(event.ydata)
   lver.set_xdata(event.xdata)
   plt.draw()
在这里,我使用了全局变量,并首先在查看区域中绘制了“十字线”。它可以被画在它的外面或者不可见,但是你明白了


我不知道实现这一目标的最佳方式

这太棒了。非常感谢你。我将使用第二个函数。你能解释一下为什么我需要使用[event.ydata,event.ydata]而不仅仅是event.ydata吗?感谢you@TMoover只能使用一个值。我更新了答案以反映这一点。实际上,我只是介绍了更新现有对象的一般方法,而不是重复删除/创建它们。我没有太多地尝试推广/优化该方法。非常感谢您的帮助。这真的帮了我很大的忙。