matplotlib交互式数据光标实现(mplcursors)


Posted in Python onJanuary 13, 2021

简介

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函数,但是在参数上发生了变化,保留了artistshoverbindingsmultiplehighlight等类似参数。
mplcursors包增加Selection对象(底层为namedtuple)表示选择的数据元素的属性。
当选中某个数据点时,可以通过添加(add)或删除(remove)事件触发、注册回调函数实现功能,回调函数只有一个参数,及选择的数据点。
在注册回调函数时,mplcursors包支持使用装饰器。

mpldatacursor与mplcursors API对比

下面以修改显示文本信息为例对比下mpldatacursormplcursors的不同实现方式。

matplotlib交互式数据光标实现(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.com/anntzer/mplcursors

到此这篇关于matplotlib交互式数据光标实现(mplcursors)的文章就介绍到这了,更多相关matplotlib交互式光标内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中unittest用法实例
Sep 25 Python
Python之父谈Python的未来形式
Jul 01 Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 Python
python rsa 加密解密
Mar 20 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
Python程序暂停的正常处理方法
Nov 07 Python
利用python实现AR教程
Nov 20 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
python双向链表实例详解
May 25 Python
Python 生成短8位唯一id实战教程
Jan 13 #Python
python uuid生成唯一id或str的最简单案例
Jan 13 #Python
全网最全python库selenium自动化使用详细教程
Jan 12 #Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 #Python
五分钟学会怎么用python做一个简单的贪吃蛇
Jan 12 #Python
python生成word合同的实例方法
Jan 12 #Python
python中常用的数据结构介绍
Jan 12 #Python
You might like
php文档更新介绍
2011/07/22 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
keras slice layer 层实现方式
2020/06/11 Python
Python requests接口测试实现代码
2020/09/08 Python
法学毕业生自我鉴定
2014/01/31 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书