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数组复制拷贝的实现方法
Jun 09 Python
基于Python实现文件大小输出
Jan 11 Python
Python解惑之整数比较详解
Apr 24 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
Feb 10 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
Numpy数组的保存与读取方法
Apr 04 Python
简单谈谈python基本数据类型
Sep 26 Python
python实现手机销售管理系统
Mar 19 Python
Django DRF路由与扩展功能的实现
Jun 03 Python
Python连接Impala实现步骤解析
Aug 04 Python
Django crontab定时任务模块操作方法解析
Sep 10 Python
详解Python中的文件操作
Jan 14 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_search()- 按元素值返回键名
2011/11/04 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
treepanel动态加载数据实现代码
2012/12/15 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
Webpack中SplitChunksPlugin 配置参数详解
2020/03/24 Javascript
20个常用Python运维库和模块
2018/02/12 Python
PyCharm安装第三方库如Requests的图文教程
2018/05/18 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
python中的unittest框架实例详解
2021/02/05 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
a标签下载链接的简单实现
2016/09/13 HTML / CSS
英国办公用品商店:Office Outlet
2018/04/04 全球购物
意大利网上药房:Farmacia 33
2020/01/27 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
软件配置管理有什么好处
2015/04/15 面试题
超市工作总结范文2014
2014/12/19 职场文书
确保工程质量承诺书
2015/04/29 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS