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计算圆周长、面积、球体体积并画出圆
Apr 08 Python
处理Python中的URLError异常的方法
Apr 30 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
Dec 08 Python
Python 处理数据的实例详解
Aug 10 Python
python 矩阵增加一行或一列的实例
Apr 04 Python
Python numpy 点数组去重的实例
Apr 18 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
Python中请不要再用re.compile了
Jun 30 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
Python同时处理多个异常的方法
Jul 28 Python
提高python代码运行效率的一些建议
Sep 29 Python
python实现简单的学生管理系统
Feb 22 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函数in_array()使用详解
2014/08/20 PHP
php建立Ftp连接的方法
2015/03/07 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
Prototype源码浅析 Enumerable部分之each方法
2012/01/16 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
python使用pymysql实现操作mysql
2016/09/13 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
幼师专业毕业生自荐信
2013/09/29 职场文书
行政主管职责范本
2014/03/07 职场文书
学习之星事迹材料
2014/05/17 职场文书
初一新生军训方案
2014/05/22 职场文书
实施意见格式范本
2015/06/05 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
go 实现简易端口扫描的示例
2021/05/22 Golang