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可视化包Bokeh
Feb 07 Python
python3 实现一行输入,空格隔开的示例
Nov 14 Python
由Python编写的MySQL管理工具代码实例
Apr 09 Python
cProfile Python性能分析工具使用详解
Jul 22 Python
Django 反向生成url实例详解
Jul 30 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
Aug 05 Python
Python的垃圾回收机制详解
Aug 28 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
Python实现爬取并分析电商评论
Jun 19 Python
python调用百度AI接口实现人流量统计
Feb 03 Python
OpenCV-Python实现轮廓的特征值
Jun 09 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中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
Gird事件机制初级读本
2007/03/10 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
DOM 事件流详解
2015/01/20 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
详解小程序如何动态绑定点击的执行方法
2019/11/26 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
python中for用来遍历range函数的方法
2018/06/08 Python
python sort、sort_index方法代码实例
2019/03/28 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
pymysql 开启调试模式的实现
2019/09/24 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
客服专员岗位职责范本
2013/11/29 职场文书
物业门卫岗位职责
2013/12/28 职场文书
班级心理活动总结
2014/07/04 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
七一建党节慰问信
2015/02/14 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
详解java如何集成swagger组件
2021/06/21 Java/Android
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技