1

我正在尝试使用 ginput 收集一系列鼠标单击位置,每次通过每次单击绘制一条垂直线来更新绘图:

import numpy as np
import matplotlib.pyplot as plt

x=np.arange(10)
y=x**2

fig,ax=plt.subplots()

times=[]

ax.plot(x,y)

while True:
    pts=plt.ginput(1)
    time=pts[0][0]  
    times.append(time)
    ax.axvline(x=time)
    # click on right side to escape
    if (time>8.5): 
        break

print ("final=",times)

这可以正常工作,因为它正确存储了所有点击位置,但它仅在每秒钟点击一次时绘制垂直线,我不明白为什么会发生这种情况。

我在用着

达尔文上的 Python 3.9.2(默认,2021 年 2 月 24 日,13:30:36)[Clang 12.0.0 (clang-1200.0.32.29)]

和 matplotlib 版本 3.3.4

4

1 回答 1

0

好的,我刚刚意识到发生了什么,正在绘制该线,但直到单击 ginput 后​​该图才更新,所以我误解了这一点,因为我似乎需要在一个位置单击两次才能在该位置获得一条线. 使用这篇文章中的解决方案,添加暂停命令可以解决问题:

import numpy as np
import matplotlib.pyplot as plt

x=np.arange(10)
y=x**2

fig,ax=plt.subplots()

times=[]

ax.plot(x,y)

while True:
    pts=plt.ginput(1)
    time=pts[0][0]  
    times.append(time)
    ax.axvline(x=time)
    plt.pause(0.05)
    if (time>8.5):
        break
于 2021-03-13T09:24:24.117 回答