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保存字符串到文件的方法
Jul 01 Python
django之常用命令详解
Jun 30 Python
Python编程修改MP3文件名称的方法
Apr 19 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
Python从使用线程到使用async/await的深入讲解
Sep 16 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
python生成word合同的实例方法
Jan 12 Python
Python实现给PDF添加水印的方法
Jan 25 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 Python
Python OpenCV实现图像模板匹配详解
Apr 07 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读注册表
2006/10/09 PHP
使用apache模块rewrite_module (转)
2007/02/14 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
PHP实现八皇后算法
2019/05/06 PHP
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
护理学毕业生自荐信
2013/10/02 职场文书
技术总监的工作职责
2013/11/13 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
卫生标语大全
2014/06/21 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
新教师教学工作总结
2015/08/12 职场文书