我是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]