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 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
Python中利用函数装饰器实现备忘功能
Mar 30 Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
Python之列表的插入&替换修改方法
Jun 28 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
Python设计模式之原型模式实例详解
Jan 18 Python
python实现一个简单的udp通信的示例代码
Feb 01 Python
Python自动抢红包教程详解
Jun 11 Python
利用anaconda保证64位和32位的python共存
Mar 09 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
python实现暗通道去雾算法的示例
Sep 27 Python
详解Python调用系统命令的六种方法
Jan 28 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 array_unique之后json_encode需要注意
2011/01/02 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
php删除指定目录的方法
2015/04/03 PHP
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
Python探索之创建二叉树
2017/10/25 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python调试神器PySnooper的使用
2019/07/03 Python
django 控制页面跳转的例子
2019/08/06 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
web字体加载方案优化小结
2019/11/29 HTML / CSS
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
婚礼证婚人证婚词
2014/01/13 职场文书
洗发露广告词
2014/03/14 职场文书
岗位职责说明书
2014/05/07 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏