python - 无需点击matplotlib即可获取鼠标坐标
问题描述
在 matplotlib 图中,如何在鼠标移动时连续读取鼠标的坐标,而无需等待点击?这在matlab中是可能的,并且有一个mpld3 插件几乎可以完全满足我的要求,但是我看不到如何从中实际访问坐标。还有包mpldatacursor,但这似乎需要点击。搜索“matplotlib mouse coordinates without click”之类的东西没有得到答案。
使用 mpld3 等附加包的答案很好,但似乎应该可以使用纯 matplotlib 解决方案。
解决方案
这可以通过连接到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()
推荐阅读
- swift - Mapbox + Swift:更改图层图像
- java - java日历中的未来日期给出了一个奇怪的行为
- javascript - 意外的 Chrome 自动填充行为 [禁用 chrome 自动填充]
- ios - 在表格上显示排序结果 - Swift4
- xml - XSLT 1.0 两个不同节点之间的所有节点
- jquery - 无法通过 AJAX 调用 WebAPI 方法,如果在 AJAX 调用中使用了调试器,则可以使用
- javascript - HTML5 Canvas - 当它超出我的矩形时隐藏文本部分
- python - 为什么 django 不使用我的自定义编码器类?
- python - 保持数据库外键一致
- python - Python搜索元组列表并根据索引返回多个条件