2016-11-13 59 views
1

私は2つのランダムなデータを得て、PyQtGraphを使って同じウィジェットにリアルタイムで描画します。私はそれらを赤と青の点として表示したい。しかし、苦労した後、私のスクリプトは動作しません。PyQtGraphの1つのプロットに2つのリアルタイムデータをプロットする方法は?

私は同じプロットで両方のデータを取得するために何ができるのでしょうか。

私はそれが愚かな質問であることを知っています。私は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]のように見えることになります最初のアイテムの代わりに最後のアイテムを置き換えますか? –

+0

@MaartenFabré私はそれを行う意思がありましたが、実際にはリアルタイムカーブに関連する大きな問題の単純なバージョンです。とにかく、あなたのコメントをありがとう! –

答えて

2

pyqtgraphは機能上の観点からは素晴らしいパッケージですが、残念なことにドキュメンテーションは不足しています。実際にはコードを掘り下げてオブジェクトの構造を理解するだけです。

お電話:

p1 = win.addPlot() 

をこれは、あなたが今、このP1オブジェクトに複数のPlotDataItemsを追加することができ、その時点でPlotItemへの参照を、(http://www.pyqtgraph.org/documentation/plotting.html#organization-of-plotting-classesをここで半便利な構造図を参照)を返します

を呼び出すときに:

curve1 = p1.plot() 

これはPlotDataItem#1を追加し、...あなたが今使用するために、第2の参照を取得するためにそれを再度呼び出す必要があります:

curve2 = p1.plot() 

これはPlotDataItem#2になり、plot()メソッドの2番目のsetDataメソッドでupdate()中に呼び出すことができます。 = dataRed [1:] dataRed [-1] = np.array(VEC) `このバックにデータ1位をシフトされていません - :

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

WOW!どうもありがとうございました。私は私の問題を解決した。すべての説明をありがとう! –

関連する問題