как увеличить график в pyqtgraph

Я не знаю, как работать с масштабируемым графиком.
Этот график рисует случайную функцию в реальном времени.
Я хочу масштабировать график в реальном времени для указанной области.
Этот код является примером кода. в пиктограмме. Этот код работает правильно для фиксированных данных.
Нельзя ли масштабировать график, движущийся в реальном времени? Не могли бы вы мне помочь?

# -*- coding: utf-8 -*-

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

win = pg.GraphicsWindow()
win.setWindowTitle('Scroll and Zoomed Plot')

plotScroll = win.addPlot()
plotScroll.setDownsampling(mode='peak')
plotScroll.setClipToView(True)
curveScroll = plotScroll.plot()

dataRnd = np.empty(100)
ptrDataRnd = 0

def updateScroll():
    global dataRnd, ptrDataRnd
    dataRnd[ptrDataRnd] = np.random.normal()
    ptrDataRnd += 1
    if ptrDataRnd >= dataRnd.shape[0]:
        tmp = dataRnd
        dataRnd = np.empty(dataRnd.shape[0] * 2)
        dataRnd[:tmp.shape[0]] = tmp
    curveScroll.setData(dataRnd[:ptrDataRnd])

LinRegionItem = pg.LinearRegionItem([0,100])
LinRegionItem.setZValue(-10)
plotScroll.addItem(LinRegionItem)

win.nextRow()

plotZoom = win.addPlot(title="Zoomed graph for Random plot ")
plotZoom.plot(dataRnd, pen=(255,255,255,200))

def updatePlot():
    plotZoom.setXRange(*LinRegionItem.getRegion(), padding=0)
def updateRegion():
    LinRegionItem.setRegion(plotZoom.getViewBox().viewRange()[0])
LinRegionItem.sigRegionChanged.connect(updatePlot)
plotZoom.sigXRangeChanged.connect(updateRegion)
updatePlot()

# update all plots
def update():
    updateScroll()

timer = pg.QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)

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

person lukas    schedule 13.06.2016    source источник
comment
Предоставьте минимальный пример, показывающий проблему. Кроме того, что вы подразумеваете под перезапуском?   -  person Trilarion    schedule 14.06.2016
comment
Спасибо за комментарий. Функция перезапуска была решена, как показано ниже. def RestartPlot(): global dataRnd,ptrDataRnd #plotScroll.clear() timer.stop() dataRnd = np.empty(100) ptrDataRnd = 0 timer.start(50)   -  person lukas    schedule 14.06.2016
comment
Я не знаком с использованием сценариев уценки. Минимальный пример второго вопроса не может быть вставлен в это место. И я заменяю новый источник второй проблемой.   -  person lukas    schedule 14.06.2016


Ответы (1)


Я также решил эту проблему. Я изменил код, как показано ниже.

До пересмотра:

curveZoom.setData(dataRnd[:ptrDataRnd])  

исправлен код:

curveZoom.setData(dataRnd[0:ptrDataRnd])

Интересно, соглашение о массиве numpy. Значение «dataRnd[:ptrDataRnd]» заключается в указании диапазона от 0 до ptrDataRnd. Я ошибаюсь? Пожалуйста, скажи мне правду.

person lukas    schedule 21.06.2016