2017-11-07 18 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 및 다른 시간 3, 4,5, .., 52. 맞지? – eyllanesc

+0

제공하는 코드는'pg'를 정의하지 않습니다. 그게 뭐야? –

+0

@PaulCornelius pg는 pyqtgraph – eyllanesc

답변

0

pyqtgraph 당신이 데이터로 목록 만 전달하면이 x 축 배치됩니다,하지만 우리는 그것을 사용하는 우리의 축을 두 축를 전달하면 우리는 우리가 사용하는 그것을 위해 시간을 제공하는 목록을 작성해야합니다 초기 시간을 저장하는 변수. 당신은 다음 모드 중 하나를 사용할 수 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 문을 남겨두고't1 ='을 추가하면 그것은 스크롤하지만 여전히 시간이 경과 한 시간과 일치하지 않습니다. 나는 내가 들어오는 샘플의 수를 기반으로한다는 것을 알고 있습니다. 그래서 샘플 속도를 늦추면 x 축이 느려지지만'Run_Time'을 X로 설정하는 방법이 있어야한다고 느낍니다. 축 또는 말의 힘 또는 RPM과 같은 다른 변수가 필요합니다. –

+0

@MatthewEspindolaMunn 그냥 끝까지 추가하기 만하면됩니다. 답을 업데이트했습니다. – eyllanesc

+0

그것이 제가 처음 시도한 것입니다, 그러나 그것은 x 축의 결과가 시간과 같지 않은 결과입니다. 그것은 스크롤 X 축을 가지고 있지만, 나는 그것이 내가 겪은 샘플뿐만 아니라 원하는 모든 변수가 X 축을 얻을 수 있기를 바랐다. –