matplotlib 范围选区(SpanSelector)的使用

范围选区概述

范围选区是一种常见的对象选择方式,在一个子图中,可以在某一个轴方向上用鼠标选择起始范围的数据,这个特性可用来实现数据缩放(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定义了操作快捷键,类型为字典。

案例:范围选取基本实现

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

案例说明

单击鼠标拖动到适当位置释放鼠标形成范围选区,选区为透明度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

案例说明

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

案例代码

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 范围选区内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python matplotlib学习笔记之坐标轴范围

    Python学习笔记--坐标轴范围 参靠视频:<Python数据可视化分析 matplotlib教程>链接:https://www.bilibili.com/video/av6989413/?p=6 所用的库及环境: IDE:Pycharm Python环境:python3.7 Matplotlib: Matplotlib 1.11 Numpy: Numpy1.15. 坐标轴范围 概念 根据需求调整坐标轴的范围 坐标轴范围调整 第一种形式 通过plt.axis()可以查看图形的x轴的最小最大坐

  • Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围

    一.用默认设置绘制折线图 import matplotlib.pyplot as plt x_values=list(range(11)) #x轴的数字是0到10这11个整数 y_values=[x**2 for x in x_values] #y轴的数字是x轴数字的平方 plt.plot(x_values,y_values,c='green') #用plot函数绘制折线图,线条颜色设置为绿色 plt.title('Squares',fontsize=24) #设置图表标题和标题字号 plt.t

  • matplotlib 范围选区(SpanSelector)的使用

    范围选区概述 范围选区是一种常见的对象选择方式,在一个子图中,可以在某一个轴方向上用鼠标选择起始范围的数据,这个特性可用来实现数据缩放(datazoom).在matplotlib中的范围选区属于部件(widgets),matplotlib中的部件都是中性(neutral )的,即与具体后端实现无关. 范围选区具体实现定义为matplotlib.widgets.SpanSelector类,继承关系为:Widget->AxesWidget->_SelectorWidget->SpanSele

  • matplotlib部件之矩形选区(RectangleSelector)的实现

    矩形选区概述 矩形选区是一种常见的对象选择方式,这个名词最常见于Photoshop中,用于在一个子图选择鼠标拖动的矩形区域中的元素,在matplotlib中的矩形选区属于部件(widgets),matplotlib中的部件都是中性(neutral )的,即与具体后端实现无关. 矩形选区具体实现定义为matplotlib.widgets.RectangleSelector类,继承关系为:Widget->AxesWidget->_SelectorWidget->RectangleSelect

  • matplotlib之多边形选区(PolygonSelector)的使用

    多边形选区概述 多边形选区是一种常见的对象选择方式,在一个子图中,单击鼠标左键即构建一个多边形的端点,最后一个端点与第一个端点重合即完成多边形选区,选区即为多个端点构成的多边形.在matplotlib中的多边形选区属于部件(widgets),matplotlib中的部件都是中性(neutral )的,即与具体后端实现无关. 多边形选区具体实现定义为matplotlib.widgets.PolygonSelector类,继承关系为:Widget->AxesWidget->_SelectorWid

  • matplotlib部件之套索Lasso的使用

    套索概述 套索(Lasso)是与套索选区(LassoSelector)相似的matplotlib部件(widgets),两者的区别主要在于: 继承关系: 套索具体实现定义为matplotlib.widgets.Lasso类,继承关系为:Widget->AxesWidget->Lasso. 套索选区具体实现定义为matplotlib.widgets.LassoSelector类,继承关系为:Widget->AxesWidget->_SelectorWidget->LassoSe

  • 利用Tkinter和matplotlib两种方式画饼状图的实例

    当我们学习python的时候,总会用到一些常用的模块,接下来我就详细讲解下利用两种不同的方式画饼状图. 首先利用[Tkinter]中的canvas画布来画饼状图: from tkinter import Tk, Canvas def DrawPie(): #创建窗口 windows=Tk() #添加标题 windows.title("画饼图") # 设置画布样式 canvas=Canvas(windows,height=500,width=500) # 将画布打包到窗口 canvas.

  • Python中的Matplotlib模块入门教程

    1 关于 Matplotlib 模块 Matplotlib 是一个由 John Hunter 等开发的,用以绘制二维图形的 Python 模块.它利用了 Python 下的数值计算模块 Numeric 及 Numarray,克隆了许多 Matlab 中的函数, 用以帮助用户轻松地获得高质量的二维图形.Matplotlib 可以绘制多种形式的图形包括普通的线图,直方图,饼图,散点图以及误差线图等:可以比较方便的定制图形的各种属性比如图线的类型,颜色,粗细,字体的大小等:它能够很好地支持一部分 Te

  • Python利用matplotlib生成图片背景及图例透明的效果

    前言 最近工作中遇到一个需求,在使用matplotlib生成图片,想要背景透明,而且图例部分也显示透明效果,通过查找相关资料找到了大概的设置方法,特此记录,方便自己或者有需要的朋友们参考学习. 示例代码 # coding=utf-8 # matplotlib背景透明示例图 # python 3.5 import numpy as np import matplotlib.pyplot as plt from pylab import mpl import scipy.stats as stats

  • Windows下为Python安装Matplotlib模块

    这玩意反反复复弄了一晚上,这里详细叙述下如何安装,肯定会对大家有所帮助.首先默认大家都装了Python,这个从官网下基本不会有任何难度. (1)Setuptools的安装 为啥先说这个,后面所有whl文件都要用这个安装.基本上没有几个教程先介绍这个的,这里说全一点,方便小白使用. 我们装的是Setuptools 0.6c11.别的版本不是不行,因为这个在Pypi上面直接有exe文件,反正就是方便.地址:https://pypi.python.org/pypi/setuptools/0.6c11.

  • python利用matplotlib库绘制饼图的方法示例

    介绍 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序.因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定. matplotlib的安装方法可以点击这里 这篇文章给大家主要介绍了python用matplotlib绘制饼图的方法,话不多说,下面来看代码

  • 利用matplotlib+numpy绘制多种绘图的方法实例

    前言 matplotlib 是Python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.本文将以例子的形式分析matplot中支持的,分析中常用的几种图.其中包括填充图.散点图(scatter plots).. 条形图(bar plots).等高线图(contour plots). 点阵图和3D图,下面来一起看看详细的介绍: 一.填充图 参考代码 from matplotlib.pyplot import * x=linspace(-3,3,100) y

随机推荐