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动态参数用法实例分析
May 25 Python
Python中使用haystack实现django全文检索搜索引擎功能
Aug 26 Python
Python中defaultdict与lambda表达式用法实例小结
Apr 09 Python
python实现五子棋游戏
Jun 18 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
python生成器用法实例详解
Nov 22 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
Python基于yield遍历多个可迭代对象
Mar 12 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
Python中文纠错的简单实现
Jul 07 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
Laravel下生成验证码的类
2017/11/15 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
Python调用C语言开发的共享库方法实例
2015/03/18 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
Python模块搜索路径代码详解
2018/01/29 Python
Python内置函数reversed()用法分析
2018/03/20 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
python 制作简单的音乐播放器
2020/11/25 Python
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
社会治安综合治理管理责任书
2014/04/16 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
幼儿教师个人总结
2015/02/05 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS