简介
mplcursors 包也可以为 matplotlib 提供交互式的数据光标(弹出式注释框),它的灵感来源于 mpldatacursor 包,可以认为是基于 mpldatacursor 包的二次开发。 相对于 mpldatacursor 包, mplcursors 包最大的特点就是提供了一些相对底层的API,这样功能实现更加灵活。
安装
pip install mplcursors
基本应用
mplcursors 包的基本应用方法与 mpldatacursor 包类似,直接应用 cursor 函数即可。
基本操作方法
鼠标左键单击图表数据元素时会弹出文本框显示最近的数据元素的坐标值。 鼠标右键单击文本框取消显示数据光标。 按d键时切换显示\关闭数据光标。案例源码
import matplotlib.pyplot as plt import numpy as np import mplcursors data = np.outer(range(10), range(1, 5)) fig, ax = plt.subplots() lines = ax.plot(data) ax.set_title("Click somewhere on a line.\nRight-click to deselect.\n" "Annotations can be dragged.") mplcursors.cursor(lines) # or just mplcursors.cursor() plt.show()
mplcursors自定义应用
mpldatacursor 包中自定义功能主要通过向 datacursor 函数传递实参实现。 mplcursors 包中的 cursor 函数对标 mpldatacursor 包中的 datacursor 函数,但是在参数上发生了变化,保留了 artists 、 hover 、 bindings 、 multiple 、 highlight 等类似参数。 mplcursors 包增加 Selection 对象(底层为 namedtuple )表示选择的数据元素的属性。 当选中某个数据点时,可以通过添加( add )或删除( remove )事件触发、注册回调函数实现功能,回调函数只有一个参数,及选择的数据点。 在注册回调函数时, mplcursors 包支持使用装饰器。
mpldatacursor与mplcursors API对比
下面以修改显示文本信息为例对比下 mpldatacursor 与 mplcursors 的不同实现方式。
mpldatacursor实现方式
import matplotlib.pyplot as plt import numpy as np from mpldatacursor import datacursor ax=plt.gca() labels = ["a", "b", "c"] for i in range(3): ax.plot(i, i,'o', label=labels[i]) datacursor(formatter='{label}'.format) plt.show()
mplcursors 实现方式一
import matplotlib.pyplot as plt import numpy as np import mplcursors ax=plt.gca() lines = ax.plot(range(3), range(3), "o") labels = ["a", "b", "c"] cursor = mplcursors.cursor(lines) cursor.connect( "add", lambda sel: sel.annotation.set_text(labels[sel.target.index])) plt.show()
mplcursors 实现方式二
import matplotlib.pyplot as plt import numpy as np import mplcursors ax=plt.gca() lines = ax.plot(range(3), range(3), "o") labels = ["a", "b", "c"] cursor = mplcursors.cursor(lines) @cursor.connect("add") def on_add(sel): sel.annotation.set_text(labels[sel.target.index]) plt.show()
结论
mplcursors 包实现的功能与 mpldatacursor 包非常相似。相对而言 mplcursors 包的API更加灵活,通过 connect 函数或者装饰器自定义属性耦合性更弱,便于实现绘图与数据光标实现的分离。
参考
https://mplcursors.readthedocs.io/en/stable/ https://github测试数据/anntzer/mplcursors
到此这篇关于matplotlib交互式数据光标实现(mplcursors)的文章就介绍到这了,更多相关matplotlib交互式光标内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
查看更多关于matplotlib交互式数据光标实现(mplcursors)的详细内容...