matplotlib部件之矩形选区(RectangleSelector)的实现


Posted in Python onFebruary 01, 2021

矩形选区概述

矩形选区是一种常见的对象选择方式,这个名词最常见于Photoshop中,用于在一个子图选择鼠标拖动的矩形区域中的元素,在matplotlib中的矩形选区属于部件(widgets),matplotlib中的部件都是中性(neutral )的,即与具体后端实现无关。

矩形选区具体实现定义为matplotlib.widgets.RectangleSelector类,继承关系为:Widget->AxesWidget->_SelectorWidget->RectangleSelector。

RectangleSelector类的签名为class matplotlib.widgets.RectangleSelector(ax, onselect, drawtype='box', minspanx=0, minspany=0, useblit=False, lineprops=None, rectprops=None, spancoords='data', button=None, maxdist=10, marker_props=None, interactive=False, state_modifier_keys=None)

RectangleSelector类构造函数的参数为:

  • ax:矩形选区生效的子图,类型为matplotlib.axes.Axes的实例。
  • onselect:矩形选区完成后执行的回调函数,函数签名为def onselect(eclick: MouseEvent, erelease: MouseEvent),eclick和erelease分别为开始和结束选区时的鼠标事件。
  • drawtype:矩形选区的外观,取值范围为{"box", "line", "none"},"box"为矩形框,"line"为矩形选区对角线,"none"无外观,类型为字符串,默认值为"box"。
  • lineprops:当drawtype == "line"时线条的属性,默认值为dict(color="black", linestyle="-", linewidth=2, alpha=0.5)。
  • rectprops:当drawtype == "box"时矩形框的属性,默认值为dict(facecolor="red", edgecolor="black", alpha=0.2, fill=True)。
  • button:设置可用于触发矩形选区的鼠标键,MouseButton列表,默认为所有鼠标键。
  • interactive:是否允许交互,布尔值,默认为False,即选择完成后选区即消失,值为True时,选区选择完成后不消失,除非按快捷键解除。
  • state_modifier_keys:快捷键设置,类型为字典。
    • “move”: 移动已存在的选区,默认没有修饰键。
    • “clear”:清除现有选区,默认为 "escape",即esc键。
    • “square”:正方形选区,默认为"shift"。
    • “center”:以当前点作为选区的中心点,默认为 "ctrl"。
    • “square” 和 “center” 可以组合使用。

案例

官方案例,https://matplotlib.org/gallery/widgets/rectangle_selector.html

案例说明

拖动鼠标画出矩形选区,默认为交互模式,显示选区框,按esc键取消选区,控制台显示选区的坐标和使用的鼠标键。按t键切换矩形选区功能的激活状态,非激活状态矩形选区功能不生效。

matplotlib部件之矩形选区(RectangleSelector)的实现

控制台输出:

(0.74, -0.38) --> (8.90, 0.75)
 The buttons you used were: 1 1

代码分析

from matplotlib.widgets import RectangleSelector
import numpy as np
import matplotlib.pyplot as plt

# 矩形选区选择时的回调函数
def line_select_callback(eclick, erelease):
  """
  Callback for line selection.

  *eclick* and *erelease* are the press and release events.
  """
  x1, y1 = eclick.xdata, eclick.ydata
  x2, y2 = erelease.xdata, erelease.ydata
  print(f"({x1:3.2f}, {y1:3.2f}) --> ({x2:3.2f}, {y2:3.2f})")
  print(f" The buttons you used were: {eclick.button} {erelease.button}")

# 激活状态快捷键回调函数,active属性和set_active方法继承自_SelectorWidget类
def toggle_selector(event):
  print(' Key pressed.')
  if event.key == 't':
    if RS.active:
      print(' RectangleSelector deactivated.')
      RS.set_active(False)
    else:
      print(' RectangleSelector activated.')
      RS.set_active(True)

# 绘图
fig, ax = plt.subplots()
N = 100000 # If N is large one can see improvement by using blitting.
x = np.linspace(0, 10, N)

ax.plot(x, np.sin(2*np.pi*x)) # plot something
ax.set_title(
  "Click and drag to draw a rectangle.\n"
  "Press 't' to toggle the selector on and off.")

# 构造矩形选区实例,选取外观为矩形框,鼠标键为左键右键有效,允许保留选区
# drawtype is 'box' or 'line' or 'none'
RS = RectangleSelector(ax, line_select_callback,
                    drawtype='box', useblit=True,
                    button=[1, 3], # disable middle button
                    minspanx=5, minspany=5,
                    spancoords='pixels',
                    interactive=True)
# 绑定键盘事件,实现切换矩形选区激活状态功能
fig.canvas.mpl_connect('key_press_event', toggle_selector)
plt.show()

到此这篇关于matplotlib部件之矩形选区(RectangleSelector)的实现的文章就介绍到这了,更多相关matplotlib 矩形选区内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
Python中装饰器学习总结
Feb 10 Python
解决python爬虫中有中文的url问题
May 11 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
python打包exe开机自动启动的实例(windows)
Jun 28 Python
Python简单处理坐标排序问题示例
Jul 11 Python
用python写测试数据文件过程解析
Sep 25 Python
安装python及pycharm的教程图解
Oct 10 Python
用python给csv里的数据排序的具体代码
Jul 17 Python
Python基础之Socket通信原理
Apr 22 Python
Python操作CSV格式文件的方法大全
Jul 15 Python
深入理解Python变量的数据类型和存储
Feb 01 #Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 #Python
Pytorch 图像变换函数集合小结
Feb 01 #Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 #Python
python中xlrd模块的使用详解
Feb 01 #Python
python中使用np.delete()的实例方法
Feb 01 #Python
flask框架中的cookie和session使用
Jan 31 #Python
You might like
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
三星英国官网:Samsung英国
2018/09/25 全球购物
计算机大学生的自我评价
2013/10/15 职场文书
学前教育学生自荐信范文
2013/12/31 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
项目合作协议书
2014/04/16 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
三方合作意向书范本
2015/05/09 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
入党申请书怎么写?
2019/06/21 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js