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赋值操作方法分享
Mar 23 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
PHP实现发送和接收JSON请求
Jun 07 Python
浅述python中深浅拷贝原理
Sep 18 Python
python如何爬取网站数据并进行数据可视化
Jul 08 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
Python pickle模块实现对象序列化
Nov 22 Python
python numpy数组中的复制知识解析
Feb 03 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
python中pivot()函数基础知识点
Jan 03 Python
python画条形图的具体代码
Apr 20 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留言本实例代码
2010/05/09 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
python中的sort方法使用详解
2014/07/25 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
Python序列操作之进阶篇
2016/12/08 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
Python2与Python3的区别实例分析
2019/04/11 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
大学班级学风建设方案
2014/05/01 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
2015年信访工作总结
2015/04/07 职场文书
雷锋的观后感
2015/06/10 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技