在下面的这段代码中,我模拟了我目前正在处理的问题,而且我已经试图弄清楚它已经有一段时间了(我在练习顺便说一下matplotlib。
它应该做的是:当我点击地图上的某个地方时,应该在最近的垂直线上创建一条小的水平红线,这意味着水平线应该只在固定的x上绘制值(在这种情况下,x值是垂直线的x值)。 y值无关紧要,因为我希望水平线绘制在任何y值上。
换句话说:垂直线应该像水平线的磁铁一样。最接近咔嗒声的垂直线应拉动水平线。
我相信event.xdata是关键所在,但我无法找到解决方案。
import matplotlib.pyplot as plt
fig = plt.figure()
for i in range(24):
plt.axvline(i/50)
plt.xlim(0,1)
plt.ylim(0,1)
def pick(event):
if event.xdata # ???
plt.ion()
plt.hlines(event.ydata,event.xdata-0.01,event.xdata+0.01,colors='r',linestyle='solid')
else:
pass
fig.canvas.mpl_connect('button_press_event',pick)
plt.show()
有什么想法吗?感谢。
答案 0 :(得分:1)
您需要将event.xdata
与您的"磁铁"进行比较pick
函数内的x值,您现在还没有这样做。
您可以从给定值列表中获取最接近的值,如下所示:
nearestMagnetValue = min(magnetValues, key=lambda x: abs(event.xdata - x))
所以把它放在你的代码中,就像这样:
import matplotlib.pyplot as plt
fig = plt.figure()
magnetValues = [i/50 for i in range(24)]
for i in magnetValues:
plt.axvline(i)
plt.xlim(0,1)
plt.ylim(0,1)
def pick(event):
if event.xdata: # ???
nearestMagnetValue = min(magnetValues, key=lambda x: abs(event.xdata - x))
plt.ion()
plt.hlines(event.ydata,nearestMagnetValue-0.01,nearestMagnetValue+0.01,colors='r',linestyle='solid')
else:
pass
fig.canvas.mpl_connect('button_press_event',pick)
plt.show()