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使用百度API上传文件到百度网盘代码分享
Nov 08 Python
Python编程中的反模式实例分析
Dec 08 Python
python入门之语句(if语句、while语句、for语句)
Jan 19 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
python进程和线程用法知识点总结
May 28 Python
python 提取文件指定列的方法示例
Aug 07 Python
Python实现的微信红包提醒功能示例
Aug 22 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 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绘图技术
2013/07/03 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
vue实现组件之间传值功能示例
2018/07/13 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
vue使用一些外部插件及样式的配置代码
2019/11/18 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
python实现代理服务功能实例
2013/11/15 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
python tkinter实现连连看游戏
2020/11/16 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
求职简历自荐信范文
2013/10/21 职场文书
理工学院学生自我鉴定
2014/02/23 职场文书
土建施工员岗位职责
2014/07/16 职场文书
十佳青年事迹材料
2014/08/21 职场文书
2014年党支部工作总结
2014/11/13 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js