• 售前

  • 售后

热门帖子
入门百科

matplotlib 范围选区(SpanSelector)的利用

[复制链接]
落木萧萧329 显示全部楼层 发表于 2021-10-25 20:33:46 |阅读模式 打印 上一主题 下一主题
范围选区概述

范围选区是一种常见的对象选择方式,在一个子图中,可以在某一个轴方向上用鼠标选择起始范围的数据,这个特性可用来实现数据缩放(
  1. datazoom
复制代码
)。在
  1. matplotlib
复制代码
中的范围选区属于部件(widgets),
  1. matplotlib
复制代码
中的部件都是
  1. 中性(neutral )
复制代码
的,即与具体后端实现无关。
范围选区具体实现界说为
  1. matplotlib.widgets.SpanSelector
复制代码
类,继承关系为:
  1. Widget->AxesWidget->_SelectorWidget->SpanSelector
复制代码
  1. SpanSelector
复制代码
类的署名为
  1. class matplotlib.widgets.SpanSelector(ax, onselect, direction, minspan=None, useblit=False, rectprops=None, onmove_callback=None, span_stays=False, button=None)
复制代码
  1. SpanSelector
复制代码
类构造函数的参数为:
      
    1. ax
    复制代码
    :范围选区收效的子图,范例为
    1. matplotlib.axes.Axes
    复制代码
    的实例。  
    1. onselect
    复制代码
    :范围选区完成后实验的回调函数,函数署名为
    1. def func(min, max)
    复制代码
    1. min
    复制代码
    1. max
    复制代码
    的数据范例均为浮点数,表示选区在某个坐标轴方向上的最小值和最大值。  
    1. direction
    复制代码
    :范围选区的坐标轴方向,取值范围为
    1. {"horizontal", "vertical"}
    复制代码
    ,范例为字符串。  
    1. minspan
    复制代码
    :选区的最小范围,选区范围小于
    1. minspan
    复制代码
    将不会触发
    1. onselect
    复制代码
    1. rectprops
    复制代码
    :范围选区的外观的属性,默认值为
    1. None
    复制代码
    。  
    1. span_stays
    复制代码
    :布尔值,是否在鼠标开释后仍然保存选区,默认值为
    1. False
    复制代码
    。  
    1. onmove_callback
    复制代码
    :当选区确定后移动鼠标触发的回调函数,函数署名为
    1. def func(min, max)
    复制代码
    1. min
    复制代码
    1. max
    复制代码
    的数据范例均为浮点数,默认值为
    1. None
    复制代码

  1. SpanSelector
复制代码
类中的
  1. state_modifier_keys
复制代码
公有变量
  1. state_modifier_keys
复制代码
界说了操作快捷键,范例为字典。
案例:范围选取基本实现

官方案例一,范围选区基本实现。
案例分析


单击鼠标拖动到得当位置开释鼠标形成范围选区,选区为透明度0.5蓝色,控制台输出选区在横坐标轴上的最大、最小坐标。
控制台输出:
  1. 1.569758064516129 2.0044354838709677
复制代码
案例代码
  1. import matplotlib.pyplot as plt
  2. import matplotlib.widgets as mwidgets
  3. fig, ax = plt.subplots()
  4. ax.plot([1, 2, 3], [10, 50, 100])
  5. def onselect(vmin, vmax):
  6.   print(vmin, vmax)
  7. rectprops = dict(facecolor='blue', alpha=0.5)
  8. span = mwidgets.SpanSelector(ax, onselect, 'horizontal',span_stays=True,
  9.                rectprops=rectprops)
  10. plt.show()
复制代码
案例:数据缩放功能

官方案例,https://matplotlib.org/gallery/widgets/span_selector.html
案例分析


在上方子图单击鼠标拖动到得当位置开释鼠标形成范围选区,选区为红色,下方子图重绘为选定地区内数据系列,起到了数据放大的结果。

案例代码
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from matplotlib.widgets import SpanSelector
  4. # Fixing random state for reproducibility
  5. np.random.seed(19680801)
  6. fig, (ax1, ax2) = plt.subplots(2, figsize=(8, 6))
  7. ax1.set(facecolor='#FFFFCC')
  8. x = np.arange(0.0, 5.0, 0.01)
  9. y = np.sin(2*np.pi*x) + 0.5*np.random.randn(len(x))
  10. ax1.plot(x, y, '-')
  11. ax1.set_ylim(-2, 2)
  12. ax1.set_title('Press left mouse button and drag to test')
  13. ax2.set(facecolor='#FFFFCC')
  14. line2, = ax2.plot(x, y, '-')
  15. def onselect(xmin, xmax):
  16.   indmin, indmax = np.searchsorted(x, (xmin, xmax))
  17.   indmax = min(len(x) - 1, indmax)
  18.   thisx = x[indmin:indmax]
  19.   thisy = y[indmin:indmax]
  20.   line2.set_data(thisx, thisy)
  21.   ax2.set_xlim(thisx[0], thisx[-1])
  22.   ax2.set_ylim(thisy.min(), thisy.max())
  23.   fig.canvas.draw()
  24.   
  25. span = SpanSelector(ax1, onselect, 'horizontal', useblit=True, span_stays=True,
  26.           rectprops=dict(alpha=0.5, facecolor='red'))
  27. # Set useblit=True on most backends for enhanced performance.
  28. plt.show()
复制代码
到此这篇关于matplotlib 范围选区(SpanSelector)的使用的文章就先容到这了,更多相关matplotlib 范围选区内容请搜索草根技术分享从前的文章或继承浏览下面的相关文章盼望大家以后多多支持草根技术分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作