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基础教程之对象和类的实际运用
Aug 29 Python
为Python程序添加图形化界面的教程
Apr 29 Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 Python
Python3 循环语句(for、while、break、range等)
Nov 20 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
python 多个参数不为空校验方法
Feb 14 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
Python closure闭包解释及其注意点详解
Aug 28 Python
基于PyQt5制作一个群发邮件工具
Apr 08 Python
基于Python实现nc批量转tif格式
Aug 14 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
php动态生成函数示例
2014/03/21 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
javascript 浏览器检测代码精简版
2010/03/04 Javascript
javascript JSON操作入门实例
2010/04/16 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
浅谈mint-ui 填坑之路
2017/11/06 Javascript
浅析vue.js数组的变异方法
2018/06/30 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
基于python实现从尾到头打印链表
2019/11/02 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
优秀经理事迹材料
2014/02/01 职场文书
火车的故事教学反思
2014/02/11 职场文书
协议书的格式
2014/04/23 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电