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类的专用方法实例分析
Jan 09 Python
centos6.7安装python2.7.11的具体方法
Jan 16 Python
Python3.4实现远程控制电脑开关机
Feb 22 Python
python 自动重连wifi windows的方法
Dec 18 Python
Python2与Python3的区别实例分析
Apr 11 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
Django数据库操作之save与update的使用
Apr 01 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 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版(4)
2006/10/09 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
python连接mysql调用存储过程示例
2014/03/05 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
业务部门经理岗位职责
2014/02/23 职场文书
新闻学专业求职信
2014/07/28 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
Java使用Unsafe类的示例详解
2021/09/25 Java/Android
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers