rwb*_*ogl 11 python matplotlib
在 matplotlib 图中,如何在鼠标移动时连续读取鼠标的坐标,而不等待点击?这在matlab中是可能的,并且有一个mpld3 插件几乎可以完全满足我的要求,但我不知道如何实际访问它的坐标。还有包mpldatacursor,但这似乎需要点击。搜索“matplotlib鼠标坐标无需点击”之类的内容没有得到答案。
使用 mpld3 等附加包的答案很好,但似乎纯 matplotlib 解决方案应该是可能的。
rwb*_*ogl 13
这可以通过连接到matplotlib 文档中motion_notify_event简要提到的来完成。每当鼠标移动时就会触发此事件,为回调函数提供一个MouseEvent可以使用的类。这个问题有一些相关的例子。
该类MouseEvent具有属性x、y、xdata和ydata。绘图中的 (x, y) 坐标由xdata和给出ydata;x并y以像素为单位。matplotlib 文档中的cursor_demo.py给出了一个示例。
这是一个相当小的例子:
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()
Run Code Online (Sandbox Code Playgroud)
解决办法很简单!当绘图上发生鼠标事件时,我们可以要求 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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15945 次 |
| 最近记录: |