2017-11-07 6 views
0

現在、私はArduinoからの着信データを持っているプロットしているGUIに取り組んでいます。今、それは最後の50サンプルに対してプロットされています。私はX軸のサイズを増やす方法を見つけましたが、データが入ってくるとシフトすることを望みます。それは見えたサンプルではなく時間の表現になります。私はx軸ラベルをどのように置くことができるかを見たいと思います。私はmatplotlibメソッドを試してみましたが、うまくいきませんでした。pyqt5を使ったスクロールX軸

class GUI(QWidget, Ui_DynoTest1): 
    def __init__(self, parent=None, border = None): 

     # This is what is used to make the graph.   
     QWidget.__init__(self, parent) 
     self.setupUi(self) 
     self.thread = GetData(self) 
     self.thread.dataChanged.connect(self.onDataChanged) 
     self.thread.start() 
     self.torque = [] 
     self.horse_power = [] 

     layout = QHBoxLayout() 
     self.plot = pg.PlotWidget() 
     layout.addWidget(self.plot) 
     self.plot.setAttribute(QtCore.Qt.WA_TranslucentBackground, True) 
     self.graphicsView.setLayout(layout) 

     self.p1 = self.plot.plotItem 
     self.p1.setLabels(left='Torque') 
     self.TorqueCurve = self.p1.plot() 
     self.TorqueCurve.setPen(pg.mkPen(QColor(0,0,0), width=2.5)) 

     self.p2 = pg.ViewBox() 
     self.HorsePowerCurve = pg.PlotCurveItem() 
     self.HorsePowerCurve.setPen(pg.mkPen(QColor(0, 0, 255), width=2.5)) 
     self.p2.addItem(self.HorsePowerCurve) 
     self.p1.scene().addItem(self.p2) 
     self.p1.showAxis('right') 
     self.p1.getAxis('right').setLabel('HorsePower', color='#0000ff') 
     self.p1.getAxis('right').linkToView(self.p2) 
     self.p1.vb.sigResized.connect(self.updateViews) 
     if len(self.torque) < 50: 
      self.torque.append(Torque) 
     else: 
      self.torque[:-1] = self.torque[1:] + [Torque] 

     if len(self.horse_power) < 50: 
      self.horse_power.append(HorsePower) 
     else: 
      self.horse_power[:-1] = self.horse_power[1:] + [HorsePower] 

     self.TorqueCurve.setData(self.torque) 
     self.HorsePowerCurve.setData(self.horse_power) 
     self.updateViews() 
+0

x軸が1,2,3、... 50のように変化し、2,3,4、... 51の後に瞬間があり、もう1つの時間が3であることがわかっているからです。 4,5、..、52。私は正しい? – eyllanesc

+0

あなたが提供するコードは 'pg'を定義していません。それは何ですか? –

+0

@PaulCornelius pgはpyqtgraph – eyllanesc

答えて

0

あなただけのリストこれはx軸を配置しますが、我々はそれのために私達の軸を使用する2つの軸を渡した場合、我々は我々が使用することのための時間を提供してリストを作成しなければならないデータとして渡すpyqtgraphの場合最初の時間を節約する変数。

あなたは次のモードのいずれかを使用することができますXのラベルを配置する場合:最初にあなたはすべてのラベルを示すことができ、第二に、個別では

self.p1.setLabels(left='Torque', bottom='Time') 
self.p1.setLabel('bottom', 'Time', units="samples") 

を。

class GUI(QWidget, Ui_DynoTest1): 
    def __init__(self, parent=None): 
     [...] 
     self.torque = [] 
     self.horse_power = [] 
     self.time = [] 
     self.counter = 0 
     [...] 
     self.p1 = self.plot.plotItem 
     self.p1.setLabels(left='Torque', bottom='Time') 
     # self.p1.setLabel('bottom', 'Time', units="samples") 
     [...] 

    def onDataChanged(self, Force, RPM, Max_RPM, Torque, Max_Torque, HorsePower, Max_HorsePower, Run_Time): 
     [...] 
     if self.counter < 50: 
      self.torque.append(Torque) 
      self.horse_power.append(HorsePower) 
      self.time.append(Run_Time) 
     else: 
      self.torque = self.torque[1:] + [Torque] 
      self.horse_power = self.horse_power[1:] + [HorsePower] 
      self.time = self.time[1:] + [Run_Time] 
     self.HorsePowerCurve.setData(self.time, self.horse_power) 
     self.TorqueCurve.setData(np.array(self.time), self.torque) 
     self.updateViews() 
+0

If else文を 't1 ='で始まったもので置き換えることで、グラフは更新されません。 if else文を残して 't1 ='を追加するとスクロールしますが、時間が経過してもまだ行には入りません。私はそれが私が入っているサンプルの数に基づいていることを知っているので、私はサンプルレートを遅くすればX軸を遅くするはずですが、私はRun_TimeをXに設定する方法が必要だと感じていますその軸に関しては、forceやrpmsのような他の変数があります。 –

+0

@MatthewEspindolaMunn最後に追加するだけで置き換えないで、私は自分の答えを更新しました。 – eyllanesc

+0

これは私が最初にやったことですが、x軸が時間と同じではないという結果になります。それはスクロールX軸を持っていますが、私はそれが私がそれが受けたサンプルだけではないことを望んでいた任意の変数にx軸を得ることができることを望んでいました。 –

関連する問題