2016-11-13 40 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

哇!非常感謝你。我解決了我的問題。非常感謝你的所有解釋! –

相關問題