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

2024-10-01 13:34:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个带有mouseover事件的绘图中创建了一条垂直线和一条水平线。这些线旨在帮助用户选择在绘图中单击的位置。 我的问题是,当鼠标移动到绘图上时,先前绘制的线不会消失。 有人能给我解释一下怎么做吗?
我用过斧头线.pop()在OnOver函数中绘制绘图后,但这不起作用。在

这是我正在使用的代码

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公司


Tags: importevent绘图asnpfig绘制button
1条回答
网友
1楼 · 发布于 2024-10-01 13:34:32

您需要删除不需要的行。例如

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()

这既不健壮也不高效。

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

^{pr2}$

在这里,我使用了全局变量,并在查看区域绘制了“十字线”。它可以画在它的外面或者不让它可见,但是你得到了这个想法。在

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

相关问题 更多 >