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程序
Apr 04 Python
wxPython框架类和面板类的使用实例
Sep 28 Python
python自动化测试实例解析
Sep 28 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
python manage.py runserver流程解析
Nov 08 Python
Python实现FLV视频拼接功能
Jan 21 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
Python读写csv文件流程及异常解决
Oct 20 Python
python 安全地删除列表元素的方法
Mar 16 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
Python 通配符删除文件的实例
2018/04/24 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
工厂仓管员岗位职责
2014/01/01 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
广告学专业求职信
2014/06/19 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
委托证明书
2014/09/17 职场文书
如何通过一篇文章了解Python中的生成器
2022/04/02 Python