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高效编程技巧
Jan 07 Python
python中的hashlib和base64加密模块使用实例
Sep 02 Python
bpython 功能强大的Python shell
Feb 16 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
python opencv之SURF算法示例
Feb 24 Python
Python学习小技巧总结
Jun 10 Python
使用python绘制二维图形示例
Nov 22 Python
python3中numpy函数tile的用法详解
Dec 04 Python
OpenCV 之按位运算举例解析
Jun 19 Python
解决运行出现'dict' object has no attribute 'has_key'问题
Jul 15 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 Python
python numpy中multiply与*及matul 的区别说明
May 26 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
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
php中定时计划任务的实现原理
2013/01/08 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
django输出html内容的实例
2018/05/27 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
用Python解决x的n次方问题
2019/02/08 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
使用python实现名片管理系统
2020/06/18 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
Linux文件操作命令都有哪些
2016/07/23 面试题
出纳年终工作总结2014
2014/12/05 职场文书
话题作文之学会尊重
2019/12/16 职场文书
docker-compose部署Yapi的方法
2022/04/08 Servers