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



我是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_()

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

有了这个信号,当用户拖动regionItem或通过程序更改regionItem时,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]。请参阅问题"为什么ndarray允许浮点索引?"了解更多信息。

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

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

最新更新