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在hadoop上跑起来
Jan 27 Python
使用matplotlib画散点图的方法
May 25 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
python 使用值来排序一个字典的方法
Nov 16 Python
python实现nao机器人手臂动作控制
Apr 29 Python
python tkinter实现彩球碰撞屏保
Jul 30 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
Apr 15 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
Python超简单容易上手的画图工具库推荐
May 10 Python
Python天气语音播报小助手
Sep 25 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扩展ZF――Validate扩展
2008/01/10 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
js宝典学习笔记(上)
2007/01/10 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
python批量同步web服务器代码核心程序
2014/09/01 Python
python服务器与android客户端socket通信实例
2014/11/12 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
编码实现字符串转整型的函数
2012/06/02 面试题
中专毕业生自我鉴定范文
2013/11/09 职场文书
初婚未育证明
2014/01/15 职场文书
大家访活动实施方案
2014/03/10 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
学习十八大演讲稿
2014/09/15 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python