我在带有鼠标悬停事件的图中创建了一条垂直线和一条水平线。这些线旨在帮助用户选择在图中单击的位置。
我的问题是,当鼠标移动到绘图上时,之前绘制的线条不会消失。
有人可以解释我该怎么做吗?
我在 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()
在此先感谢您的帮助。
伊沃
您需要删除不需要的行。例如
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()
在这里,我使用了全局变量并首先在查看区域中绘制了“十字线”。它可以被绘制在它的外部或者不可见,但你明白了。
我不知道实现这一目标的最佳方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)