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实现网站文件的全备份和差异备份
Nov 30 Python
python生成验证码图片代码分享
Jan 28 Python
Python制作钉钉加密/解密工具
Dec 07 Python
Python 模板引擎的注入问题分析
Jan 01 Python
Python实现的文本编辑器功能示例
Jun 30 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
python调用接口的4种方式代码实例
Nov 19 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 Python
PyQt实现计数器的方法示例
Jan 18 Python
Python+Appium新手教程
Apr 17 Python
Python3接口性能测试实例代码
Jun 20 Python
Python极值整数的边界探讨分析
Sep 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
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
php 模拟get_headers函数的代码示例
2013/04/27 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中使用HTMLParser解析html实例
2015/02/08 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
Python函数基本使用原理详解
2020/03/19 Python
计算机应用毕业生自荐信
2013/10/23 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
工作简历自我评价
2015/03/11 职场文书
求职意向书范本
2015/05/11 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
室外天线与收音机天线杆接合方法
2022/04/05 无线电
Python列表的索引与切片
2022/04/07 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python