Python 无需在matplotlib中单击即可获取鼠标坐标

Python 无需在matplotlib中单击即可获取鼠标坐标,python,matplotlib,Python,Matplotlib,在matplotlib绘图中,如何在移动鼠标时连续读取鼠标坐标,而不等待单击?这在中是可能的,并且有一个几乎完全符合我要求的方法,但我看不出如何从中实际访问坐标。还有软件包,但这似乎需要点击。不点击搜索matplotlib鼠标坐标之类的东西不会得到答案 使用其他软件包(如mpld3)的答案是可以的,但似乎纯matplotlib解决方案应该是可能的。这可以通过连接到motion\u notify\u事件来实现,matplotlib文档中简要提到了这一点。此事件在鼠标移动时激发,为回调函数提供了一个

在matplotlib绘图中,如何在移动鼠标时连续读取鼠标坐标,而不等待单击?这在中是可能的,并且有一个几乎完全符合我要求的方法,但我看不出如何从中实际访问坐标。还有软件包,但这似乎需要点击。不点击搜索matplotlib鼠标坐标之类的东西不会得到答案


使用其他软件包(如mpld3)的答案是可以的,但似乎纯matplotlib解决方案应该是可能的。

这可以通过连接到motion\u notify\u事件来实现,matplotlib文档中简要提到了这一点。此事件在鼠标移动时激发,为回调函数提供了一个可使用的类。有一些相关的例子

MouseEvent类具有属性x、y、扩展数据和ydata。绘图的x、y坐标由扩展数据和ydata给出;x和y以像素为单位。matplotlib文档中的中给出了一个示例

下面是一个相当小的例子:

import matplotlib.pyplot as plt
import numpy as np


def plot_unit_circle():
    angs = np.linspace(0, 2 * np.pi, 10**6)
    rs = np.zeros_like(angs) + 1
    xs = rs * np.cos(angs)
    ys = rs * np.sin(angs)
    plt.plot(xs, ys)


def mouse_move(event):
    x, y = event.xdata, event.ydata
    print(x, y)


plt.connect('motion_notify_event', mouse_move)
plot_unit_circle()
plt.axis('equal')
plt.show()

这可以通过连接到motion_notify_事件来完成,matplotlib文档中简要提到了这一点。无论何时,只要鼠标移动到回调函数,就会触发该类的事件。有一些相关的例子

MouseEvent类具有属性x、y、扩展数据和ydata。绘图的x、y坐标由扩展数据和ydata给出;x和y以像素为单位。matplotlib文档中的中给出了一个示例

下面是一个相当小的例子:

import matplotlib.pyplot as plt
import numpy as np


def plot_unit_circle():
    angs = np.linspace(0, 2 * np.pi, 10**6)
    rs = np.zeros_like(angs) + 1
    xs = rs * np.cos(angs)
    ys = rs * np.sin(angs)
    plt.plot(xs, ys)


def mouse_move(event):
    x, y = event.xdata, event.ydata
    print(x, y)


plt.connect('motion_notify_event', mouse_move)
plot_unit_circle()
plt.axis('equal')
plt.show()

解决方案非常简单!我们可以要求matplotlib在绘图上发生鼠标事件时通知我们。 我们需要具体说明三件事来实现这一目标:

我们对哪个鼠标事件感兴趣?这里我们感兴趣的是鼠标移动,而不是点击 matplotlib应将事件数据发送到何处?这里我们定义了一个函数来接收数据。这个名字是任意的,它可以是任何东西

将事件和函数的名称传递给matplotlib,我们将它们传递给.connect方法

就这么简单

def on_mouse_move(event):
    print('Event received:',event.x,event.y)

image= #your image

plt.imshow(image)
plt.connect('motion_notify_event',on_mouse_move)
plt.show()

解决方案非常简单!我们可以要求matplotlib在绘图上发生鼠标事件时通知我们。 我们需要具体说明三件事来实现这一目标:

我们对哪个鼠标事件感兴趣?这里我们感兴趣的是鼠标移动,而不是点击 matplotlib应将事件数据发送到何处?这里我们定义了一个函数来接收数据。这个名字是任意的,它可以是任何东西

将事件和函数的名称传递给matplotlib,我们将它们传递给.connect方法

就这么简单

def on_mouse_move(event):
    print('Event received:',event.x,event.y)

image= #your image

plt.imshow(image)
plt.connect('motion_notify_event',on_mouse_move)
plt.show()

可能的复制我认为这是更容易做到的使用阴谋,个人。为您需要的绘图提供一个数据框,并将hover指定为感兴趣的列。我个人认为,使用Plotly更容易实现这一点。为您需要的绘图提供一个数据框,并将hover指定为感兴趣的列。我建议您在答案中添加一些解释性文字,否则您可能会将其作为“低质量”删除,即使它可能是正确的答案!我建议您在答案中添加一些解释性文字,否则您可能会将其删除为“低质量”,即使它可能是正确的答案!