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程序中的运用
Mar 02 Python
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
python中使用PIL制作并验证图片验证码
Mar 15 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
python基础 range的用法解析
Aug 23 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
利用Opencv实现图片的油画特效实例
Feb 28 Python
正确的理解和使用Django信号(Signals)
Apr 14 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下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
2020/05/28 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python语言的12个基础知识点小结
2014/07/10 Python
Python引用模块和查找模块路径
2016/03/17 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
django rest framework serializers序列化实例
2020/05/13 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
自荐信需注意事项
2014/01/25 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
爱国主义演讲稿
2014/05/07 职场文书
车间统计员岗位职责
2015/04/14 职场文书
政工师工作总结2015
2015/05/26 职场文书
宾馆安全管理制度
2015/08/06 职场文书
小学思想品德教学反思
2016/02/24 职场文书
安全生产协议书
2016/03/22 职场文书