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 相关文章推荐
下载给定网页上图片的方法
Feb 18 Python
Python编程判断这天是这一年第几天的方法示例
Apr 18 Python
python之PyMongo使用总结
May 26 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
Mar 22 Python
Python中一些不为人知的基础技巧总结
May 19 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
在Python中增加和插入元素的示例
Nov 01 Python
使用Python的turtle模块画国旗
Sep 24 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
python梯度下降算法的实现
Feb 24 Python
Python实现CAN报文转换工具教程
May 05 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
Yii数据库缓存实例分析
2016/03/29 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
python创建和删除目录的方法
2015/04/29 Python
python 链接和操作 memcache方法
2017/03/04 Python
Python数据结构之图的应用示例
2018/05/11 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
python实现根据文件格式分类
2019/10/31 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
Python使用type动态创建类操作示例
2020/02/29 Python
Python实现GIF图倒放
2020/07/16 Python
python3将变量输入的简单实例
2020/08/19 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
我的中国梦演讲稿1000字
2014/08/19 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
个人存款证明书
2014/10/18 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis