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 多进程通信模块的简单实现
Feb 20 Python
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
Apr 08 Python
详解Python中heapq模块的用法
Jun 28 Python
利用python程序生成word和PDF文档的方法
Feb 14 Python
Python 中Pickle库的使用详解
Feb 24 Python
Python实现聊天机器人的示例代码
Jul 09 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 Python
在Keras中利用np.random.shuffle()打乱数据集实例
Jun 15 Python
如何基于python实现年会抽奖工具
Oct 20 Python
Django使用channels + websocket打造在线聊天室
May 20 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
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
php里array_work用法实例分析
2015/07/13 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
js 操作符汇总
2014/11/08 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
浅谈JS运算符&&和|| 及其优先级
2016/08/10 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
VSCode搭建React Native环境
2020/05/07 Javascript
python添加菜单图文讲解
2019/06/04 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
python线程池如何使用
2020/05/28 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
美国温暖商店:The Warming Store
2018/12/15 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
电子信息专业学生自荐信
2013/11/09 职场文书
校园新闻广播稿
2014/01/10 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书