matplotlib对象拾取事件处理的实现


Posted in Python onJanuary 14, 2021

前面讲到的众多数据光标案例其实都用到了matplotlib的pick_event事件(拾取事件),该事件表示画布中的对象被选中,该事件默认是禁用的,需要artist(数据元素,例如Line2D, Text, Patch, Polygon, AxesImage等)设置picker属性才会启用。

picker属性

picker属性有多种取值:

  • None:默认值,表示禁用 pick_event事件。
  • 布尔值:如果为True,则启用事件,当鼠标移动到该数据元素上方时触发事件。
  • 数值:如果取值是数值,则可以认为将该值赋给了pickradius(即事件的触发半径,默认值为15)。
  • 函数:如果取值为函数,则可用于确定数据元素是否触发鼠标事件。

pick_event事件

数据元素利用picker属性启用pick_event事件后,就可以使用事件管理器mpl_connect绑定事件。
pick_event事件除了常规属性,还有两个特有属性:

  • mouseevent:生成拾取事件的鼠标事件。详细信息请参阅matplotlib.backend_bases.MouseEvent。
  • artist:生成拾取事件的数据元素。

案例

下面以如下案例简单说明pick_event事件的处理。
案例功能:触发对象拾取事件则创建对象到两个轴的垂线。
大致流程:

  • 设置picker属性,启用pick_event事件。
  • 编写回调函数,详见注释。
  • 绑定事件。
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('click on points')
# 设置绘图元素的picker属性启用对象拾取事件
line, = ax.plot(np.random.rand(10)*10, 'o', picker=5)
ax.axis([0,10,0,10])

def onpick(event):
  # 通过event.artist属性获取被拾取到的数据元素
  thisline = event.artist
  # 获取数据元素的x,y坐标数组
  xdata = thisline.get_xdata()
  ydata = thisline.get_ydata()
  # 获取到当前元素的索引
  ind = event.ind
  # xdata[ind]为当前元素的x坐标,ydata[ind]为当前元素的y坐标。
  ax.plot((0,xdata[ind]), (ydata[ind],ydata[ind]), 'g--')
  ax.plot((xdata[ind],xdata[ind]), (0,ydata[ind]), 'g--')
  # 重绘图像
  thisline.figure.canvas.draw()
# 绑定事件
fig.canvas.mpl_connect('pick_event', onpick)

plt.show()

 matplotlib对象拾取事件处理的实现

到此这篇关于matplotlib对象拾取事件处理的实现的文章就介绍到这了,更多相关matplotlib对象拾取内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python转码问题的解决方法
Oct 07 Python
Python实现控制台进度条功能
Jan 04 Python
Python 如何访问外围作用域中的变量
Sep 11 Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
python爬取网易云音乐评论
Nov 16 Python
selenium处理元素定位点击无效问题
Jun 12 Python
python中时间、日期、时间戳的转换的实现方法
Jul 06 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
python 调用API接口 获取和解析 Json数据
Sep 28 Python
变长双向rnn的正确使用姿势教学
May 31 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 #Python
python 写一个水果忍者游戏
Jan 13 #Python
python中编写函数并调用的知识点总结
Jan 13 #Python
Python jieba库分词模式实例用法
Jan 13 #Python
python中yield的用法详解
Jan 13 #Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 #Python
selenium如何定位span元素的实现
Jan 13 #Python
You might like
怎么在Windows系统中搭建php环境
2013/08/31 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
vue实现记事本功能
2019/06/26 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
JS实现前端路由功能示例【原生路由】
2020/05/29 Javascript
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
详解python上传文件和字符到PHP服务器
2017/11/24 Python
查看django版本的方法分享
2018/05/14 Python
python银行系统实现源码
2019/10/25 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
幼儿园大班开学寄语
2014/08/02 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
Oracle中DBLink的详细介绍
2022/04/29 Oracle