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的Urllib库的一些高级用法
Apr 30 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
Python计算字符宽度的方法
Jun 14 Python
python查询mysql,返回json的实例
Mar 26 Python
Sanic框架请求与响应实例分析
Jul 16 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
python plotly绘制直方图实例详解
Jul 22 Python
Django CBV类的用法详解
Jul 26 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
python实时监控logstash日志代码
Apr 27 Python
python小白学习包管理器pip安装
Jun 09 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 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学习 运算符与运算符优先级
2008/06/15 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
js获取url传值的方法
2015/12/18 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
layui表格数据重载
2019/07/27 Javascript
js实现点赞效果
2020/03/16 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
python爬取内容存入Excel实例
2019/02/20 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
python如何实现复制目录到指定目录
2020/02/13 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
数学高效课堂实施方案
2014/03/29 职场文书
抗洪救灾标语
2014/10/08 职场文书
银行贷款委托书范本
2014/10/11 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
雷锋电影观后感
2015/06/10 职场文书
体育教师教学随笔
2015/08/15 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
MySQL sql_mode的使用详解
2021/05/08 MySQL