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实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
Python下的Mysql模块MySQLdb安装详解
Apr 09 Python
从零学Python之入门(四)运算
May 27 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
Python输出带颜色的字符串实例
Oct 10 Python
Python实现扩展内置类型的方法分析
Oct 16 Python
Python中int()函数的用法浅析
Oct 17 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
python+selenium实现163邮箱自动登陆的方法
Dec 31 Python
Python使用try except处理程序异常的三种常用方法分析
Sep 05 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
Django中session进行权限管理的使用
Jul 09 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
其他功能
2006/10/09 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
jquery根据一个值来选中select下的option实例代码
2016/08/29 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python实现ping指定IP的示例
2018/06/04 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
Python连接字符串过程详解
2020/01/06 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
Cocopanda波兰:购买化妆品、护肤品、护发和香水
2020/05/25 全球购物
汽车销售求职自荐信
2013/10/01 职场文书
护士个人简历自荐信
2013/10/18 职场文书
产品销售员岗位职责
2013/12/18 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
建筑系毕业生自我鉴定
2014/01/24 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
优乐美广告词
2014/03/14 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书