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之模拟鼠标键盘动作具体实现
Dec 30 Python
python实现自动重启本程序的方法
Jul 09 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
python距离测量的方法
Mar 06 Python
python实现log日志的示例代码
Apr 28 Python
python实现flappy bird小游戏
Dec 24 Python
Python多进程fork()函数详解
Feb 22 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
Python values()与itervalues()的用法详解
Nov 27 Python
pytorch+lstm实现的pos示例
Jan 14 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 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开发中的页面跳转方法总结
2015/04/26 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
教大家制作简单的php日历
2015/11/17 PHP
php 数据结构之链表队列
2017/10/17 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
Python运用于数据分析的简单教程
2015/03/27 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
python3实现随机数
2018/06/25 Python
更新修改后的Python模块方法
2019/03/03 Python
Django web框架使用url path name详解
2019/04/29 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
奉献演讲稿范文
2014/05/21 职场文书
客户答谢会活动方案
2014/08/31 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
Python实现视频中添加音频工具详解
2021/12/06 Python
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers