matplotlib 范围选区(SpanSelector)的使用


Posted in Python onFebruary 24, 2021

范围选区概述

范围选区是一种常见的对象选择方式,在一个子图中,可以在某一个轴方向上用鼠标选择起始范围的数据,这个特性可用来实现数据缩放(datazoom)。在matplotlib中的范围选区属于部件(widgets),matplotlib中的部件都是中性(neutral )的,即与具体后端实现无关。

范围选区具体实现定义为matplotlib.widgets.SpanSelector类,继承关系为:Widget->AxesWidget->_SelectorWidget->SpanSelector

SpanSelector类的签名为class matplotlib.widgets.SpanSelector(ax, onselect, direction, minspan=None, useblit=False, rectprops=None, onmove_callback=None, span_stays=False, button=None)

SpanSelector类构造函数的参数为:

  • ax:范围选区生效的子图,类型为matplotlib.axes.Axes的实例。
  • onselect:范围选区完成后执行的回调函数,函数签名为def func(min, max)minmax的数据类型均为浮点数,表示选区在某个坐标轴方向上的最小值和最大值。
  • direction:范围选区的坐标轴方向,取值范围为{"horizontal", "vertical"},类型为字符串。
  • minspan:选区的最小范围,选区范围小于minspan将不会触发onselectrectprops:范围选区的外观的属性,默认值为None
  • span_stays:布尔值,是否在鼠标释放后仍然保留选区,默认值为False
  • onmove_callback:当选区确定后移动鼠标触发的回调函数,函数签名为def func(min, max)minmax的数据类型均为浮点数,默认值为None

SpanSelector类中的state_modifier_keys公有变量 state_modifier_keys定义了操作快捷键,类型为字典。

案例:范围选取基本实现

官方案例一,范围选区基本实现。

案例说明

matplotlib 范围选区(SpanSelector)的使用

单击鼠标拖动到适当位置释放鼠标形成范围选区,选区为透明度0.5蓝色,控制台输出选区在横坐标轴上的最大、最小坐标。
控制台输出:

1.569758064516129 2.0044354838709677

案例代码

import matplotlib.pyplot as plt
import matplotlib.widgets as mwidgets
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [10, 50, 100])
def onselect(vmin, vmax):
  print(vmin, vmax)
rectprops = dict(facecolor='blue', alpha=0.5)
span = mwidgets.SpanSelector(ax, onselect, 'horizontal',span_stays=True,
               rectprops=rectprops)
plt.show()

案例:数据缩放功能

官方案例,https://matplotlib.org/gallery/widgets/span_selector.html

案例说明

matplotlib 范围选区(SpanSelector)的使用

在上方子图单击鼠标拖动到适当位置释放鼠标形成范围选区,选区为红色,下方子图重绘为选定区域内数据系列,起到了数据放大的效果。

案例代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import SpanSelector

# Fixing random state for reproducibility
np.random.seed(19680801)

fig, (ax1, ax2) = plt.subplots(2, figsize=(8, 6))
ax1.set(facecolor='#FFFFCC')

x = np.arange(0.0, 5.0, 0.01)
y = np.sin(2*np.pi*x) + 0.5*np.random.randn(len(x))

ax1.plot(x, y, '-')
ax1.set_ylim(-2, 2)
ax1.set_title('Press left mouse button and drag to test')

ax2.set(facecolor='#FFFFCC')
line2, = ax2.plot(x, y, '-')


def onselect(xmin, xmax):
  indmin, indmax = np.searchsorted(x, (xmin, xmax))
  indmax = min(len(x) - 1, indmax)

  thisx = x[indmin:indmax]
  thisy = y[indmin:indmax]
  line2.set_data(thisx, thisy)
  ax2.set_xlim(thisx[0], thisx[-1])
  ax2.set_ylim(thisy.min(), thisy.max())
  fig.canvas.draw()
  
span = SpanSelector(ax1, onselect, 'horizontal', useblit=True, span_stays=True,
          rectprops=dict(alpha=0.5, facecolor='red'))
# Set useblit=True on most backends for enhanced performance.

plt.show()

到此这篇关于matplotlib 范围选区(SpanSelector)的使用的文章就介绍到这了,更多相关matplotlib 范围选区内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python处理cookie详解
Feb 07 Python
Python contextlib模块使用示例
Feb 18 Python
Python中join和split用法实例
Apr 14 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
python+mysql实现学生信息查询系统
Feb 21 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
python中数据库like模糊查询方式
Mar 02 Python
python实现快递价格查询系统
Mar 03 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
pytorch实现ResNet结构的实例代码
May 17 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 Python
Python 数据可视化之Bokeh详解
Nov 02 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 #Python
matplotlib部件之套索Lasso的使用
Feb 24 #Python
matplotlib之属性组合包(cycler)的使用
Feb 24 #Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 #Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 #Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 #Python
pandas map(),apply(),applymap()区别解析
Feb 24 #Python
You might like
老生常谈PHP位运算的用途
2017/03/12 PHP
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
python实现可变变量名方法详解
2019/07/01 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
python如何实时获取tcpdump输出
2020/09/16 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
不用游标的SQL语句有哪些
2012/09/07 面试题
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
关键字throw与throws的用法差异
2016/11/22 面试题
文艺演出策划方案
2014/06/07 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
父亲节活动策划方案
2014/08/24 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
政府四风问题整改措施
2014/10/04 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
2014年化验室工作总结
2014/11/21 职场文书
2015年招聘工作总结
2014/12/12 职场文书
个人合作协议范本
2015/08/06 职场文书
windows系统搭建WEB服务器详细教程
2022/08/05 Servers