gpt4 book ai didi

python - 当 x 值之间发生单击时,在固定 x 值上绘制 h 线

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:44 25 4
gpt4 key购买 nike

在下面的这段代码中,我正在模拟我当前正在处理的一个问题,并且我已经尝试解决它很长一段时间了(顺便说一下,我正在练习 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()

有什么想法吗?谢谢。

最佳答案

您需要将 event.xdatapick 函数内的“magnet”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()

关于python - 当 x 值之间发生单击时,在固定 x 值上绘制 h 线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30589069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com