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中正则表达式的使用详解
Oct 17 Python
Python中的一些陷阱与技巧小结
Jul 10 Python
Python循环语句中else的用法总结
Sep 11 Python
详谈python中冒号与逗号的区别
Apr 18 Python
Python实现聊天机器人的示例代码
Jul 09 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
pandas DataFrame创建方法的方式
Aug 02 Python
详解python tkinter模块安装过程
Jan 06 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
python破解同事的压缩包密码
Oct 14 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 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使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
vue一步步实现alert功能
2017/07/05 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
浅谈Python 参数与变量
2020/06/20 Python
用python计算文件的MD5值
2020/12/23 Python
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
抽样调查项目计划书
2014/04/24 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
申报优秀教师材料
2014/12/16 职场文书
工作失误检讨书范文
2015/01/26 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
小学教师教学反思
2016/02/24 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技