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中用fork()函数生成的子进程
May 04 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
python matlibplot绘制多条曲线图
Feb 19 Python
python导入模块交叉引用的方法
Jan 19 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
python中matplotlib实现随鼠标滑动自动标注代码
Apr 23 Python
python中if及if-else如何使用
Jun 02 Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 Python
python正则表达式re.search()的基本使用教程
May 21 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 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
CodeIgniter基于Email类发邮件的方法
2016/03/29 PHP
div移动 输入框不能输入的问题
2009/11/19 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
理解Python中函数的参数
2015/04/27 Python
Python 探针的实现原理
2016/04/23 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
Javascript如何发送一个Ajax请求
2015/01/26 面试题
《长城》教学反思
2014/02/14 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
大学四年个人总结
2015/03/03 职场文书
工资证明格式模板
2015/06/12 职场文书
六一亲子活动感想
2015/08/07 职场文书
合理化建议书范文
2015/09/14 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python