2016-11-13 39 views
1

我愿意得到2个随机数据,并使用PyQtGraph以实时方式将其绘制在相同的窗口小部件中。我希望它们显示为红色和蓝色点。但是,经过一段时间后,我的脚本无法工作。如何在PyQtGraph的一个绘图中绘制两个实时数据?

我想知道我能做些什么才能在同一个图中获得两个数据。

我知道这是一个愚蠢的问题。我是一名Python和编码的初学者。

这里是我的代码:

#-*- coding: utf-8 -*- 
import random 
import time 
from collections import deque 
import pyqtgraph as pg 
from pyqtgraph.Qt import QtCore, QtGui 
import numpy as np 
import os 
import spidev 

win = pg.GraphicsWindow() 
win.setWindowTitle('DOTS') 


p1 = win.addPlot() 
p1.setRange(yRange=[0,25]) 
p1.setRange(xRange=[0,25]) 
curve1 = p1.plot() 


nsamples=300 #Number of lines for the data 

dataRed= np.zeros((nsamples,2),float) #Matrix for the Red dots 
dataBlue=np.zeros((nsamples,2),float) #Matrix for the Blue dots 

def getData(): 
    global dataRed, dataBlue 

    t0= random.uniform(1.6,20.5) #Acquiring Data 
    d0= random.uniform(1.6,20.5) #Acquiring Data 
    vec=(t0, d0) 

    dataRed[:-1] = dataRed[1:] 
    dataRed[-1]=np.array(vec) 

    t0= random.uniform(1.6,20.5) #Acquiring Data 
    d0= random.uniform(1.6,20.5) #Acquiring Data 
    vec=(t0, d0) 

    dataBlue[:-1] = dataBlue[1:] 
    dataBlue[-1]=np.array(vec) 


def plot(): 

    #Blue Dots 
    curve1.setData(dataBlue, pen=None, symbol='o', symbolPen=None, symbolSize=4, symbolBrush=('b')) 
    #Red Dots 
    curve1.setData(dataRed, pen=None, symbol='o', symbolPen=None, symbolSize=4, symbolBrush=('r')) 


def update(): 

    getData() 
    plot() 

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_()# -*- coding: utf-8 -*- 

我会很感激你的帮助。

+0

'dataRed [: - 1] = dataRed [1:] dataRed [-1] = np.array(VEC)'不是此移位的数据1米的地方的背面然后替换最后一个项目而不是第一个? –

+0

@MaartenFabré我打算这么做,实际上它是一个与实时曲线相关的更大问题的简单版本。无论如何,谢谢你的评论! –

回答

2

尽管pyqtgraph从功能的角度来看是一个很好的包,但遗憾的是缺少文档,而且您只需深入研究代码并开始了解对象的结构。

当调用:

p1 = win.addPlot() 

这将返回到PlotItem的引用,在该点处可以将多个PlotDataItems此P1对象现在添加(见这里半有用结构图:http://www.pyqtgraph.org/documentation/plotting.html#organization-of-plotting-classes

所以,当你拨打:

curve1 = p1.plot() 

这增加PlotDataItem#1,......你现在需要再次调用它来获得第二参考使用:

curve2 = p1.plot() 

这成为PlotDataItem#2,然后你就可以()使用你的阴谋()方法的第二个SetData方法更新期间调用。将如下所示:

def plot(): 

    #Blue Dots 
    curve1.setData(dataBlue, pen=None, symbol='o', symbolPen=None, symbolSize=4, symbolBrush=('b')) 
    #Red Dots 
    curve2.setData(dataRed, pen=None, symbol='o', symbolPen=None, symbolSize=4, symbolBrush=('r')) 
+0

哇!非常感谢你。我解决了我的问题。非常感谢你的所有解释! –

相关问题