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

person django    schedule 30.10.2015    source источник


Ответы (1)


Pyqtgraphs linearregionitem имеет сигнал с именем sigRegionChanged.

С помощью этого сигнала элемент regionItem излучает сам себя, когда пользователь перетаскивает его или когда он изменяется программно. Используя getRegion(), вы можете затем получить минимум и максимум элемента linearregionitem.

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

Это выведет позицию low и high при перетаскивании, например.

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() для индексов, в основном делая вызов red[9:13]. См. вопрос "Почему ndarray разрешает индекс с плавающей запятой?" для получения дополнительной информации об этом. .

Нарезку можно выполнить в regionUpdated, а затем вы можете делать со срезом все, что хотите, например. распечатай!

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