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模块顶层运行的代码引起的一个Bug
Jul 04 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
Python实现字符串逆序输出功能示例
Jun 24 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
Ubuntu安装Jupyter Notebook教程
Oct 18 Python
Python正则表达式和元字符详解
Nov 29 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
python画图的函数用法以及技巧
Jun 28 Python
深入了解NumPy 高级索引
Jul 24 Python
简述python Scrapy框架
Aug 17 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 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中call_user_func_array的作用
2013/06/07 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
基于Jquery的简单&简陋Tabs插件代码
2010/02/09 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
layui实现数据分页功能
2019/07/27 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
Python获取央视节目单的实现代码
2015/07/25 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
python statsmodel的使用
2020/12/21 Python
利用css3如何设置没有上下边的列表间隔线
2017/07/03 HTML / CSS
几道PHP面试题
2013/04/14 面试题
学校门卫管理制度
2014/01/30 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
学习计划书怎么写
2014/09/15 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
个人先进材料范文
2014/12/30 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
诚信教育主题班会
2015/08/13 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python
oracle数据库去除重复数据
2022/05/20 Oracle