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 24 Python
Python访问MySQL封装的常用类实例
Nov 11 Python
python清除字符串里非数字字符的方法
Jul 02 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
numpy排序与集合运算用法示例
Dec 15 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
如何用python写一个简单的词法分析器
Dec 18 Python
Django实现单用户登录的方法示例
Mar 28 Python
NumPy 数组使用大全
Apr 25 Python
Python中生成ndarray实例讲解
Feb 22 Python
Python 中random 库的详细使用
Jun 03 Python
Python实现提取PDF简历信息并存入Excel
Apr 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动态变静态原理
2006/11/25 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
js文字横向滚动特效
2015/11/11 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
Angular2 http jsonp的实例详解
2017/08/31 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
详解Python中最难理解的点-装饰器
2017/04/03 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
基于python监控程序是否关闭
2020/01/14 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
python实现三壶谜题的示例详解
2020/11/02 Python
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
采购部岗位职责
2013/11/24 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
导游词格式
2015/02/13 职场文书
罚款通知怎么写
2015/04/22 职场文书
剧场版《转生恶役只好拔除破灭旗标》公开最新视觉图 2023年上映
2022/04/02 日漫