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求列表交集的方法汇总
Nov 10 Python
Python实现LRU算法的2种方法
Jun 24 Python
约瑟夫问题的Python和C++求解方法
Aug 20 Python
Python中几种导入模块的方式总结
Apr 27 Python
Sanic框架流式传输操作示例
Jul 18 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
Django model反向关联名称的方法
Dec 15 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
使用Matplotlib 绘制精美的数学图形例子
Dec 13 Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 Python
Python新手学习装饰器
Jun 04 Python
Python使用for生成列表实现过程解析
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
一段php加密解密的代码
2007/07/16 PHP
php入门教程 精简版
2009/12/13 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
PHP开启opcache提升代码性能
2015/04/26 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
JavaScript 创建对象
2009/07/17 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
2013年最新自荐信范文
2014/06/23 职场文书
村安全生产责任书
2014/08/25 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
初中作文评语集锦
2014/12/25 职场文书
科技活动总结范文
2015/05/11 职场文书
外出考察学习心得体会
2016/01/18 职场文书