简体   繁体   English

如何在pyqtgraph中缩放绘图

[英]how to zoom the plot in pyqtgraph

I don't know how to operate the plot to be zoomed.我不知道如何操作要缩放的情节。
This plot draw random function in real time.该图实时绘制随机函数。
I want to zoom the plot in real time for specified region.我想实时缩放指定区域的绘图。
This code is example code in pyqtgraph.此代码是 pyqtgraph 中的示例代码。 This code works right for fixed data.此代码适用于固定数据。
Is it impossible the plot moving in real time to zoom?情节实时移动以放大是不可能的吗? Would you please help me?你能帮我吗?

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

I also solved this problem.我也解决了这个问题。 I revised the code as shown below line.我修改了代码,如下所示。

Before revision:改版前:

curveZoom.setData(dataRnd[:ptrDataRnd])  

revised code:修改后的代码:

curveZoom.setData(dataRnd[0:ptrDataRnd])

I wonder the convention of the numpy array.我想知道 numpy 数组的约定。 The meaning of "dataRnd[:ptrDataRnd]" is to specify range from 0th to ptrDataRnd. “dataRnd[:ptrDataRnd]”的意思是指定从0th到ptrDataRnd的范围。 Am I wrong?我错了吗? Please tell me the truth.请告诉我真相。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM