如何在pyqtgraph中缩放绘图

Posted

技术标签:

【中文标题】如何在pyqtgraph中缩放绘图【英文标题】:how to zoom the plot in pyqtgraph 【发布时间】:2016-10-13 18:40:03 【问题描述】:

我不知道如何操作要缩放的情节。 该图实时绘制随机函数。 我想实时缩放指定区域的绘图。 此代码是 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_()

【问题讨论】:

请提供一个最小示例来说明问题。还有你说的重启是什么意思? 感谢您的评论。 “重新启动”功能已解决,如下所示。 def RestartPlot(): global dataRnd,ptrDataRnd #plotScroll.clear() timer.stop() dataRnd = np.empty(100) ptrDataRnd = 0 timer.start(50) 我不熟悉使用降价脚本。第二个问题的最小例子不能插入这个地方。我用第二个问题替换了新源。 【参考方案1】:

我也解决了这个问题。我修改了代码,如下所示。

修订前:

curveZoom.setData(dataRnd[:ptrDataRnd])  

修改代码:

curveZoom.setData(dataRnd[0:ptrDataRnd])

我想知道 numpy 数组的约定。 “dataRnd[:ptrDataRnd]”的含义是指定从0th到ptrDataRnd的范围。我错了吗? 请告诉我真相。

【讨论】:

以上是关于如何在pyqtgraph中缩放绘图的主要内容,如果未能解决你的问题,请参考以下文章

pyqtgraph 自定义缩放问题

如何使用 PyQtgraph 更改绘图的刻度字体大小

如何将鼠标点击信号连接到 pyqtgraph 绘图小部件

如何更新pyqtgraph中的绘图?

在pyqtgraph中实现实时绘图的最简单方法是啥

pyqtgraph:在缩放时保持 TextItem 的恒定位置