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 相关文章推荐
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
python使用matplotlib绘制柱状图教程
Feb 08 Python
Python实现霍夫圆和椭圆变换代码详解
Jan 12 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
python pycurl验证basic和digest认证的方法
May 02 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
使用python根据端口号关闭进程的方法
Nov 06 Python
Python3字符串encode与decode的讲解
Apr 02 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
python 实现return返回多个值
Nov 19 Python
python基于property()函数定义属性
Jan 22 Python
Jupyter Notebook 实现正常显示中文和负号
Apr 24 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实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
Javascript的比较汇总
2016/07/25 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
JS实现动态无缝轮播
2020/01/11 Javascript
Postman内建变量常用方法实例解析
2020/07/28 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
Python设计模式之代理模式实例
2014/04/26 Python
python机器学习之神经网络(三)
2017/12/20 Python
python实现网页自动签到功能
2019/01/21 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
毕业生自我鉴定范文
2013/11/08 职场文书
部队党性分析材料
2014/02/16 职场文书
护士求职自荐信
2015/03/25 职场文书
公司职员入党自传书
2015/06/26 职场文书
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL