Matplotlib事件onclick在变量中存储坐标?

Posted

技术标签:

【中文标题】Matplotlib事件onclick在变量中存储坐标?【英文标题】:Matplotlib event onclick store coordinates in variable? 【发布时间】: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()

【问题讨论】:

【参考方案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 变量。我们有不同的设置吗?

以上是关于Matplotlib事件onclick在变量中存储坐标?的主要内容,如果未能解决你的问题,请参考以下文章

关于onclick事件中的参数传递问题

xPages - 寻呼机 onClick 事件问题

JS:从变量更改 OnClick 事件

JavaScript动态按钮onClick事件(变量范围)

onclick 事件与对象

如何在 matplotlib 中为交互式绘图的 onclick(event) 函数创建类?