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中的几种数据类型
Jan 02 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
django中send_mail功能实现详解
Feb 06 Python
python方法生成txt标签文件的实例代码
May 10 Python
python程序封装为win32服务的方法
Mar 07 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Python基于requests实现模拟上传文件
Apr 21 Python
python使用布隆过滤器的实现示例
Aug 20 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 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编写的抽奖程序中奖概率算法
2015/05/14 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
javascript动态加载二
2012/08/22 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
详解Python中的正则表达式的用法
2015/04/09 Python
python多进程共享变量
2016/04/06 Python
详解django2中关于时间处理策略
2019/03/06 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
python logging添加filter教程
2019/12/24 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
北京华建集团SQL面试题
2014/06/03 面试题
会计顶岗实习心得
2014/01/25 职场文书
公司办公室岗位职责
2014/03/19 职场文书
公司开业庆典主持词
2014/03/21 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
关于安全的广播稿
2014/10/23 职场文书
财务会计实训报告
2014/11/05 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers