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的urllib库提交WEB表单
Feb 24 Python
Python greenlet实现原理和使用示例
Sep 24 Python
Python遍历目录中的所有文件的方法
Jul 08 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
python实现mysql的读写分离及负载均衡
Feb 04 Python
Python程序运行原理图文解析
Feb 10 Python
Python3中的json模块使用详解
May 05 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
Python Collatz序列实现过程解析
Oct 12 Python
python实现的汉诺塔算法示例
Oct 23 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
Python何绘制带有背景色块的折线图
Apr 23 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
自动分页的不完整解决方案
2007/01/12 PHP
PHP文件读取功能的应用实例
2015/05/08 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
python支持断点续传的多线程下载示例
2014/01/16 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
Python 解决相对路径问题:"No such file or directory"
2020/06/05 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
好家长事迹材料
2014/01/23 职场文书
建材投资建议书
2014/05/16 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
刑事撤诉申请书
2015/05/18 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
Golang并发工具Singleflight
2022/05/06 Golang
Hive常用日期格式转换语法
2022/06/25 数据库