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 相关文章推荐
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
python 打印对象的所有属性值的方法
Sep 11 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
python 匹配url中是否存在IP地址的方法
Jun 04 Python
Python用5行代码写一个自定义简单二维码
Oct 21 Python
pytorch打印网络结构的实例
Aug 19 Python
Python list与NumPy array 区分详解
Nov 06 Python
Python Numpy库常见用法入门教程
Jan 16 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
May 26 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
Jun 11 Python
python包的导入方式总结
Mar 02 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中使用XML
2006/10/09 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
jquery 查找新建元素代码
2010/07/06 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
JS removeAttribute()方法实现删除元素的某个属性
2021/01/11 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
Python实现的tab文件操作类分享
2014/11/20 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
如何基于Python创建目录文件夹
2019/12/31 Python
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
大学校庆策划书
2014/01/31 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
公司酒会主持词
2015/07/02 职场文书
社区安全温馨提示语
2015/07/14 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
解决python3安装pandas出错的问题
2021/05/20 Python