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 排列组合之itertools
Mar 20 Python
Python中的map()函数和reduce()函数的用法
Apr 27 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
Python基础中所出现的异常报错总结
Nov 19 Python
Python搜索引擎实现原理和方法
Nov 27 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
Django上线部署之IIS的配置方法
Aug 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伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
JavaScript中的细节分析
2012/06/30 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
一文了解Vue中的nextTick
2019/05/06 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
用Python生成器实现微线程编程的教程
2015/04/13 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
深入理解python中的select模块
2017/04/23 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
比较基础的php面试题及答案-填空题
2014/04/26 面试题
毕业生个人求职信范文分享
2014/01/05 职场文书
投资建议书模板
2014/05/12 职场文书
施工安全标语
2014/06/07 职场文书
2014年绿化工作总结
2014/12/09 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python