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学习手册中的python多态示例代码
Jan 21 Python
Python实现的多线程端口扫描工具分享
Jan 21 Python
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
Python list运算操作代码实例解析
Jan 20 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
python 爬取B站原视频的实例代码
Sep 09 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
Mar 02 Python
python实现黄金分割法的示例代码
Apr 28 Python
教你漂亮打印Pandas DataFrames和Series
May 29 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
生成缩略图
2006/10/09 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
javascript 日期常用的方法
2009/11/11 Javascript
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
Python查看微信撤回消息代码
2018/06/07 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
实习推荐信
2014/05/10 职场文书
安全生产承诺书范文
2014/05/22 职场文书
体育教师求职信
2014/06/30 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
授权委托书
2015/01/28 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
MySQL系列之四 SQL语法
2021/07/02 MySQL
SQLServer中exists和except用法介绍
2021/12/04 SQL Server