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 28 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
Python通用循环的构造方法实例分析
Dec 19 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
Python itertools.product方法代码实例
Mar 27 Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
python 实现单例模式的5种方法
Sep 23 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 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中json_encode()和json_decode()
2014/05/25 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
vue-loader教程介绍
2017/06/14 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
JS实现数组深拷贝的方法分析
2019/03/06 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
python验证码识别实例代码
2018/02/03 Python
python文字转语音实现过程解析
2019/11/12 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
python中time.ctime()实例用法
2021/02/03 Python
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
《美丽的彩虹》教学反思
2014/02/25 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
慰问信模板
2015/02/14 职场文书
2015年工程部工作总结
2015/04/30 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android