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安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
浅析Python中signal包的使用
Nov 13 Python
Zabbix实现微信报警功能
Oct 09 Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
简单了解django缓存方式及配置
Jul 19 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
用Python抢火车票的简单小程序实现解析
Aug 14 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
python手写均值滤波
Feb 19 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 insert语法详解
2008/06/07 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
javascript的内存管理详解
2013/08/07 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
javascript判断office版本示例
2014/04/11 Javascript
javascript实现表单验证
2016/01/29 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
Python中的index()方法使用教程
2015/05/18 Python
python实现Floyd算法
2018/01/03 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
pip install命令安装扩展库整理
2021/03/02 Python
校本教研工作方案
2014/01/14 职场文书
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
服务理念口号
2014/06/11 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
优秀教师单行材料
2014/12/16 职场文书
行政助理岗位职责
2015/02/10 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
APP界面设计技巧和注意事项
2022/04/29 杂记