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 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
Python的高级Git库 Gittle
Sep 22 Python
Python创建系统目录的方法
Mar 11 Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 Python
TensorFlow实现RNN循环神经网络
Feb 28 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
python 脚本生成随机 字母 + 数字密码功能
May 26 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
wxPython窗体拆分布局基础组件
Nov 19 Python
利用python绘制数据曲线图的实现
Apr 09 Python
在python中对于bool布尔值的取反操作
Dec 11 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程序中的常见漏洞进行攻击
2006/10/09 PHP
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
python list 合并连接字符串的方法
2013/03/09 Python
python字典多条件排序方法实例
2014/06/30 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
python实现控制COM口的示例
2019/07/03 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
AJAX的优缺点都有什么
2015/08/18 面试题
机电专业个人求职信范文
2013/12/30 职场文书
大一学生的职业生涯规划书范文
2014/01/19 职场文书
大学生毕业鉴定
2014/01/31 职场文书
电子商务专业求职信
2014/03/08 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
校运会新闻稿
2015/07/17 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL