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以环状形式组合排列图片并输出的方法
Mar 17 Python
Python中几种导入模块的方式总结
Apr 27 Python
Python遍历文件夹和读写文件的实现方法
May 10 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
tensorflow构建BP神经网络的方法
Mar 12 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
Python sep参数使用方法详解
Feb 12 Python
Django自定义列表 models字段显示方式
Apr 03 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 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中addslashes函数与sql防注入
2014/11/17 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
PHP反射学习入门示例
2019/06/14 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
计算机本科生自荐信
2013/10/15 职场文书
学校三八妇女节活动情况总结
2014/03/09 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
食品质检员岗位职责
2015/04/08 职场文书
硕士学位申请报告
2015/05/15 职场文书
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS