2015-01-14 5 views
0

저는 PyQtGraph로 스크롤 플롯 창을 만들려고합니다. 플롯 자체에는 여러 축이 있습니다. 나는 this을 다중 축의 기초로 사용했다. 스크롤 비트를 수행하기 위해베이스로 this one을 사용했습니다.PyQtGraph 슬라이딩 윈도우가 y 오프셋을 얻습니다.

내 문제는 내 데이터에 대해 스크롤 플롯이 시간이 갈수록 증가하는 y- 오프셋을 얻는 것입니다. 나는 또한 누적 플롯에 표시하기 위해 동일한 데이터를 사용하여 시도했다 (실제로 스크롤보기를 수행 하겠지만). y 오프셋을 얻지 못했습니다. Y 오프셋 점차적으로 증가시키는 효과없는 - - 이것은 내 테스트 샘플의 마지막 모습입니다

물론

, 나는 Y 오프셋를 표시하지 않는 싶습니다을, 상단 플롯해야 아래쪽 플롯

Scrolling plotwith y-offset compared to accumulating plot with no y-offset

두 플롯은 동일한 데이터 세트가 마지막 50 개 샘플을 동일.

나는이를 생성하는 데 사용하고 코드입니다 :

import pyqtgraph as pg 
from pyqtgraph.Qt import QtCore, QtGui 
import numpy as np 
from time import sleep 

win = pg.GraphicsWindow() 
win.setWindowTitle('Sliding Window Test') 

p1 = win.addPlot() 
p1.setLabels(left='Large Range') 

## create third ViewBox. 
## this time we need to create a new axis as well. 
p3 = pg.ViewBox() 
ax3 = pg.AxisItem('right') 
p1.layout.addItem(ax3, 2, 3) 
p1.scene().addItem(p3) 
ax3.linkToView(p3) 
p3.setXLink(p1) 
ax3.setZValue(-10000) 
ax3.setLabel('Small Range', color='#ff0000') 

win.nextRow() 
p5 = win.addPlot() 
p5.setLabels(left='Large Range') 

## create third ViewBox. 
## this time we need to create a new axis as well. 
p7 = pg.ViewBox() 
ax7 = pg.AxisItem('right') 
p5.layout.addItem(ax7, 2, 3) 
p5.scene().addItem(p7) 
ax7.linkToView(p7) 
p7.setXLink(p5) 
ax7.setZValue(-10000) 
ax7.setLabel('Small Range', color='#ff0000') 

## Handle view resizing 
def updateViews(): 
    ## view has resized; update auxiliary views to match 
    global p1, p3, p5, p7 
    p3.setGeometry(p1.vb.sceneBoundingRect()) 

    p7.setGeometry(p5.vb.sceneBoundingRect()) 

    ## need to re-update linked axes since this was called 
    ## incorrectly while views had different shapes. 
    ## (probably this should be handled in ViewBox.resizeEvent) 
    p3.linkedViewChanged(p1.vb, p3.XAxis) 

    p7.linkedViewChanged(p5.vb, p7.XAxis) 

updateViews() 
p1.vb.sigResized.connect(updateViews) 
p5.vb.sigResized.connect(updateViews) 


data1 = [] 
data3 = [] 

curve1 = p1.plot() 
curve3 = pg.PlotCurveItem(pen='r') 
p3.addItem(curve3) 

curve5 = p5.plot() 
curve7 = pg.PlotCurveItem(pen='r') 
p7.addItem(curve7) 

data1 = [1000.0*r - 400 for r in np.random.random(size=600)] 
data3 = [1.5*r for r in np.random.random(size=600)] 

p1.setRange(yRange=(-400, 600)) 
p3.setRange(yRange=(0, 1.5)) 

p5.setRange(yRange=(-400, 600)) 
p7.setRange(yRange=(0, 1.5)) 

timer = pg.QtCore.QTimer() 
r = 0 
def update(): 
    global timer 
    global r 
    if r > 50: 
     curve1.setData(data1[r-50:r]) 
     curve3.setData(data3[r-50:r]) 
     curve1.setPos(r - 50, r) 
     curve3.setPos(r - 50, r) 
    else: 
     curve1.setData(data1[:r]) 
     curve3.setData(data3[:r]) 

    curve5.setData(data1[:r]) 
    curve7.setData(data3[:r]) 

    r +=1 
    if r >= 600: 
     timer.stop() 

timer.timeout.connect(update) 
timer.start(100) 

## Start Qt event loop unless running in interactive mode or using pyside. 
if __name__ == '__main__': 
    import sys 
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
     QtGui.QApplication.instance().exec_() 

답변

1

간단한 오류 : 상단 플롯에서 두 곡선이 때문에이 라인의 Y 방향으로 이동됩니다

curve1.setPos(r - 50, r) 
    curve3.setPos(r - 50, r) 

그들은 대신 다음과 같이 보입니다 :

curve1.setPos(r - 50, 0) 
    curve3.setPos(r - 50, 0) 
관련 문제