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列表与元组详解实例
Nov 01 Python
python中使用sys模板和logging模块获取行号和函数名的方法
Apr 15 Python
Python中使用摄像头实现简单的延时摄影技术
Mar 27 Python
python图像处理之镜像实现方法
May 30 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
深入理解Tensorflow中的masking和padding
Feb 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获取程序执行的时间
2013/06/09 PHP
ThinkPHP中order()使用方法详解
2016/04/19 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
用javascript实现画板的代码
2007/09/05 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
python获取指定网页上所有超链接的方法
2015/04/04 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
物流专业毕业生推荐信范文
2013/11/18 职场文书
企业业务员岗位职责
2014/03/14 职场文书
中学教师个人总结
2015/02/10 职场文书
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
python开发实时可视化仪表盘的示例
2021/05/07 Python
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers