实时数据监控:PyQtGraph
我正在做一个项目,需要分析来自一个设备的信号。我有一个可以获取设备数据的库,现在我在收集这些数据并绘制图表。我想做一个实时数据监控器,可以实时绘制图形。经过搜索,我发现PyQtGraph非常适合这个任务。不过我对Qt不太熟悉,所以我在找一些可以修改的例子。PyQtGraph文档中有一些例子可以实时更新图表,但我需要的是一个实时监控的效果——也就是说,图表要随着数据的接收向右移动。
如果数据是一个已知的连续函数,我可以用x - w*t
来更新输入,其中t
是时间,这样波形就会向右移动。但我现在处理的是离散数据,所以我不太确定如何用PyQtGraph实现这个效果。如果有人能给我一些建议该怎么做,那就太好了。
目前我有的代码是这样的:
代码
app = QtGui.QApplication([])
#mw = QtGui.QMainWindow()
#mw.resize(800,800)
win = pg.GraphicsWindow(title="Basic plotting examples")
win.resize(1000,600)
win.setWindowTitle('pyqtgraph example: Plotting')
# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)
p6 = win.addPlot(title="Updating plot")
curve = p6.plot(pen='r')
X_axis = numpy.linspace(0,100,12800)
#'data' is my required y_axis containing 12800 values
ydata = np.array_split(data,50)
xdata = np.array_split(X_axis,50)
ptr = 0
def update():
global curve, data, ptr, p6
curve.setData(xdata[ptr%50],ydata[ptr%50])
ptr += 1
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(1000)
这个代码每2秒更新一次数据,但我希望它能向右移动。
1 个回答
7
要让图表可以滚动,你有三种选择:
滚动原始数据并重新绘制图表(可以参考 numpy.roll)
curve = plotItem.plot(data) data = np.roll(data, 1) # scroll data curve.setData(data) # re-plot
移动图表曲线,让它在视图中滑动:
curve = plotItem.plot(data) curve.setPos(x, 0) # Move the curve
移动视图区域,让图表曲线看起来像是在滚动
curve = plotItem.plot(data) plotItem.setXRange(x1, x2) # Move the view
滚动图表示例(目前只在开发版本中)展示了这三种方法: