【问题标题】:Matplotlib event onclick store coordinates in variable?Matplotlib事件onclick在变量中存储坐标?
【发布时间】:2022-01-10 12:05:30
【问题描述】:

我希望能够使用我在图表中单击的点的坐标,以便稍后在我的脚本中使用。 我一直在尝试使用 onclick 函数中的全局变量,但这不起作用。为什么? 第二个问题:我该如何解决?

这是我尝试将 x 坐标存储在变量 x 中的简化代码。脚本完成后,x 变量的值为 -999,即初始值。我希望它获得鼠标在图形上单击的 x 坐标:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.random.rand(10))

x = -999


def onclick(event):
    print (event.xdata, event.ydata)
    global x
    x = event.xdata
    print(x)
    plt.close()

cid = fig.canvas.mpl_connect('button_press_event', onclick)

plt.show()

【问题讨论】:

    标签: python-3.x matplotlib event-handling


    【解决方案1】:

    您的代码有效。如果您在最后打印x 变量,在plt.show 之后,您将获得x 的正确值。

    参见下面的代码和示例:

    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot(np.random.rand(10))
    
    x = -999
    
    
    def onclick(event):
        print (event.xdata, event.ydata)
        global x
        x = event.xdata
        plt.close()
    
    cid = fig.canvas.mpl_connect('button_press_event', onclick)
    plt.show()
    print('x_pos '+str(x))
    

    输出给出:

    1.1866935483870962 0.6654995725561207
    x_pos 1.1866935483870962
    

    【讨论】:

    • 您好,感谢您的回答。但是,如果我完全使用您的代码,我会得到:
      x_pos -999 4.87923387096774 0.5276053672087042 那就是在调用函数之前读取 x_pos 变量。我们有不同的设置吗?
    猜你喜欢
    • 2014-10-20
    • 2011-04-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多