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 深入理解yield
Sep 06 Python
python cookielib 登录人人网的实现代码
Dec 19 Python
实例说明Python中比较运算符的使用
May 13 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
python 获取字符串MD5值方法
May 29 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
Python实现的扫码工具居然这么好用!
Jun 07 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 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上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
php批量上传的实现代码
2013/06/09 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
Python对接六大主流数据库(只需三步)
2019/07/31 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
年度考核评语
2014/01/19 职场文书
就业协议书怎么填
2014/09/15 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
龙门石窟导游词
2015/02/02 职场文书
美容院员工规章制度
2015/08/05 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android