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将xml和xsl转换为html的方法
Mar 10 Python
Python建立Map写Excel表实例解析
Jan 17 Python
Python内置函数reversed()用法分析
Mar 20 Python
Python中将dataframe转换为字典的实例
Apr 13 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
python里dict变成list实例方法
Jun 26 Python
Python中的list与tuple集合区别解析
Oct 12 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
使用python把xmind转换成excel测试用例的实现代码
Oct 12 Python
python 求两个向量的顺时针夹角操作
Mar 04 Python
Python Pandas 删除列操作
Mar 16 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创建Cookie数组的详解
2013/07/03 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
jquery 选择器部分整理
2009/10/28 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
Python卸载模块的方法汇总
2016/06/07 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
python画图的函数用法以及技巧
2019/06/28 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
python求前n个阶乘的和实例
2020/04/02 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
英国在线花园中心:You Garden
2018/06/03 全球购物
创业资金计划书
2014/02/06 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
消防安全员岗位职责
2014/03/10 职场文书
春季运动会开幕词
2015/01/28 职场文书
学校节水倡议书
2015/04/29 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
python 中的@运算符使用
2021/05/26 Python
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技
如何利用python实现Simhash算法
2022/06/28 Python