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 相关文章推荐
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
python先序遍历二叉树问题
Nov 10 Python
numpy.where() 用法详解
May 27 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
python的pygal模块绘制反正切函数图像方法
Jul 16 Python
Django中的cookie和session
Aug 27 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 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写的采集程序
2007/03/16 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
PHP中串行化用法示例
2016/11/16 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
js实现日历的简单算法
2017/01/24 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
用Python编程实现语音控制电脑
2014/04/01 Python
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
python计算两个数的百分比方法
2018/06/29 Python
基于python中__add__函数的用法
2019/11/25 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
Python中的With语句的使用及原理
2020/07/29 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
商务英语毕业生自荐信范文
2013/11/08 职场文书
自我推荐书
2013/12/04 职场文书
求职自荐信怎么写
2014/03/06 职场文书
在校实习生求职信
2014/06/18 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS