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中functools模块的常用函数解析
Jun 30 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
Jun 05 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
Python3 操作符重载方法示例
Nov 23 Python
Python程序退出方式小结
Dec 09 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
浅析python内置模块collections
Nov 15 Python
PyCharm下载和安装详细步骤
Dec 17 Python
20行Python代码实现视频字符化功能
Apr 13 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
php smarty模版引擎中的缓存应用
2009/12/11 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
php学习之function的用法
2012/07/14 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
img标签中onerror用法
2009/08/13 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
Python接口开发实现步骤详解
2020/04/26 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
大学生护理专业自荐信
2013/10/03 职场文书
村官学习十八大感想
2014/01/15 职场文书
行政管理专业求职信
2014/07/06 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript