pyqtgraph LinearRegionItem 获取选定区域之间的曲线数据

pyqtgraph LinearRegionItem get curve data between selected region

我是 pyqtGraph 的新手,使用 LinearRegionItem 进行选择。有没有一种方法可以获得仅供选择的曲线数据? 对我来说,获取位于选择之间的数据对处理很重要。

指针指向正确方向的任何帮助都会有所帮助

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
#
app = QtGui.QApplication([])
#
win = pg.GraphicsWindow()
win.resize(1000, 600)
#
p1 = win.addPlot(title="Multiple curves")
p1.plot(np.random.normal(size=100), pen=(255, 0, 0), name="Red curve")
p1.plot(np.random.normal(size=110) + 5, pen=(0, 255, 0), name="Blue curve")
# LinearRegionItem
#
def updateRegion(window, viewRange):
    region = lr.getRegion()
    print region
#
lr = pg.LinearRegionItem([10, 40])
lr.setZValue(-10)
p1.addItem(lr)
p1.sigXRangeChanged.connect(updateRegion)
#
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

Pyqtgraphs linearregionitem 有一个名为 sigRegionChanged 的信号。

有了这个信号,regionItem 会在用户拖动它或以编程方式更改它时自行发出。然后使用 getRegion() 可以得到 linearregionitem 的低点和高点。

def regionUpdated(regionItem):
    lo,hi = regionItem.getRegion()
    print lo,hi
lr.sigRegionChanged.connect(regionUpdated)

这将在拖动时输出位置低点和高点,例如

9.50787175868 13.9172032101

如果您将红色曲线作为 numpy 数组,那么您可以使用 lo 和 hi 对其进行切片。

red = np.random.normal(size=100)
red[9.50787175868:13.9172032101]

给出

[ 0.13231953 -0.5609786  -0.13632821  0.79973   ]

用浮点数对索引数组进行切片感觉有点奇怪,但 numpy 首先在索引上运行 int(),基本上使调用变为红色 [9:13]。有关详细信息,请参阅问题 "Why ndarray allow floating point index?"

切片可以在 regionUpdated 中完成,然后您可以对切片做任何您想做的事情,例如打印出来!

def regionUpdated(regionItem):
    lo,hi = regionItem.getRegion()
    print red[lo:hi]