<tfoot id='NrTxi'></tfoot>

  • <legend id='NrTxi'><style id='NrTxi'><dir id='NrTxi'><q id='NrTxi'></q></dir></style></legend>

      <small id='NrTxi'></small><noframes id='NrTxi'>

    1. <i id='NrTxi'><tr id='NrTxi'><dt id='NrTxi'><q id='NrTxi'><span id='NrTxi'><b id='NrTxi'><form id='NrTxi'><ins id='NrTxi'></ins><ul id='NrTxi'></ul><sub id='NrTxi'></sub></form><legend id='NrTxi'></legend><bdo id='NrTxi'><pre id='NrTxi'><center id='NrTxi'></center></pre></bdo></b><th id='NrTxi'></th></span></q></dt></tr></i><div id='NrTxi'><tfoot id='NrTxi'></tfoot><dl id='NrTxi'><fieldset id='NrTxi'></fieldset></dl></div>
          <bdo id='NrTxi'></bdo><ul id='NrTxi'></ul>
      1. 如何使用pyqtgraph TimeAxisItem使X轴时间动态刷新

        时间:2023-08-05
      2. <small id='a2o56'></small><noframes id='a2o56'>

        <legend id='a2o56'><style id='a2o56'><dir id='a2o56'><q id='a2o56'></q></dir></style></legend>

            <tbody id='a2o56'></tbody>
            <bdo id='a2o56'></bdo><ul id='a2o56'></ul>
            1. <i id='a2o56'><tr id='a2o56'><dt id='a2o56'><q id='a2o56'><span id='a2o56'><b id='a2o56'><form id='a2o56'><ins id='a2o56'></ins><ul id='a2o56'></ul><sub id='a2o56'></sub></form><legend id='a2o56'></legend><bdo id='a2o56'><pre id='a2o56'><center id='a2o56'></center></pre></bdo></b><th id='a2o56'></th></span></q></dt></tr></i><div id='a2o56'><tfoot id='a2o56'></tfoot><dl id='a2o56'><fieldset id='a2o56'></fieldset></dl></div>

                  <tfoot id='a2o56'></tfoot>
                  本文介绍了如何使用pyqtgraph TimeAxisItem使X轴时间动态刷新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我将根据一系列数据制作实时曲线.首先,我建立了一个数量字典,里面有 3 组数据.当前程序可以动态绘制曲线.X轴也可以显示时间,也是实时更新的.但是,X 轴上不同点的时间始终是相同的值.

                  I'm going to make a real-time curve out of a sequence of data. First, I established a quantity dictionary, which has 3 groups of data. The current program can draw a curve dynamically. The X-axis can also show the time, which is also updated in real time. However, the time at different points in the X-axis is always the same value.

                  UNIX_EPOCH_naive = datetime.datetime(1970, 1, 1, 0, 0) #offset-naive datetime
                  UNIX_EPOCH_offset_aware = datetime.datetime(1970, 1, 1, 0, 0, tzinfo = pytz.utc) #offset-aware datetime
                  UNIX_EPOCH = UNIX_EPOCH_naive
                  
                  TS_MULT_us = 1e6
                  
                  def now_timestamp(ts_mult=TS_MULT_us, epoch=UNIX_EPOCH):
                      return(int((datetime.datetime.utcnow() - epoch).total_seconds()*ts_mult))
                  
                  def int2dt(ts, ts_mult=TS_MULT_us):
                      tz = pytz.timezone('Asia/Shanghai')
                      user_ts = int(time.time())
                      d1 = datetime.datetime.fromtimestamp(float(user_ts))
                      d1x = tz.localize(d1)
                      return(d1x)
                  
                  def dt2int(dt, ts_mult=TS_MULT_us, epoch=UNIX_EPOCH):
                      delta = dt - epoch
                      return(int(delta.total_seconds()*ts_mult))
                  
                  def td2int(td, ts_mult=TS_MULT_us):
                      return(int(td.total_seconds()*ts_mult))
                  
                  def int2td(ts, ts_mult=TS_MULT_us):
                      return(datetime.timedelta(seconds=float(ts)/ts_mult))
                  
                  class TimeAxisItem(pg.AxisItem):
                      def __init__(self, *args, **kwargs):
                          super(TimeAxisItem, self).__init__(*args, **kwargs)
                      def tickStrings(self, values, scale, spacing):
                          return [int2dt(value).strftime("%H:%M:%S") for value in values]
                  
                  p = win.addPlot(title="Data-Time Graph", axisItems={'bottom': TimeAxisItem(orientation='bottom')})
                  data_dict = {}
                  p.addLegend() 
                  data_x=[]
                  
                  
                  def getDate():
                      ......
                      .....
                      curve = p.plot(pen = color[len(data_dict)],name=name)
                      data_dict[name] = [curve] # dictionary: {key:[curve,[dadta1,data2,...]]}
                      data_dict[name].append([val])
                  
                  def addToDisplay():
                      p.plot()
                      for i in data_dict.items():
                          data = i[1][1] #
                          curve = i[1][0] #
                          if(len(data) > data_frequency):#
                               data_y=data[- data_frequency:]
                          else:
                               data_y = data[:]
                          curve.setData(data_y)#
                  
                  if __name__ == "__main__":
                      th= threading.Thread(target=getDate)# 
                      th.start()
                      timer = pg.QtCore.QTimer()
                      timer.timeout.connect(addToDisplay) 
                      timer.start(10)
                  

                  我希望X轴是动态刷新的,右边是最近的时间,左边是过去的时间.

                  What I hope is that the X-axis is dynamically refreshed, with the latest time on the right side and the past time is on the left side.

                  推荐答案

                  我不完全确定您想要实现什么,因为您的代码没有运行,但您似乎正在尝试创建时间戳图.这是一个使用 TimeAxisItem 来跟踪 X 轴上经过的时间的小部件.

                  I'm not entirely sure what you're trying to achieve since your code doesn't run but it seems you're trying to create a timestamp plot. Here's a widget that uses TimeAxisItem to keep track of elapsed time on the X-axis.

                  PyQt5

                  from PyQt5 import QtCore, QtGui, QtWidgets
                  from threading import Thread
                  from collections import deque
                  import pyqtgraph as pg
                  import numpy as np
                  import random
                  import sys
                  import time
                  
                  """Scrolling Timestamp Plot Widget Example"""
                  
                  class TimeAxisItem(pg.AxisItem):
                      """Internal timestamp for x-axis"""
                      def __init__(self, *args, **kwargs):
                          super(TimeAxisItem, self).__init__(*args, **kwargs)
                  
                      def tickStrings(self, values, scale, spacing):
                          """Function overloading the weak default version to provide timestamp"""
                  
                          return [QtCore.QTime().currentTime().addMSecs(value).toString('mm:ss') for value in values]
                  
                  class ScrollingTimestampPlot(QtGui.QWidget):
                      """Scrolling plot widget with timestamp on x-axis and dynamic y-axis"""
                  
                      def __init__(self, parent=None):
                          super(ScrollingTimestampPlot, self).__init__(parent)
                  
                          # Internal timestamp for x-axis
                          self.timestamp = QtCore.QTime()
                          self.timestamp.start()
                  
                          # Desired Frequency (Hz) = 1 / self.FREQUENCY
                          # USE FOR TIME.SLEEP (s)
                          self.FREQUENCY = 0.025
                  
                          # Screen refresh rate to update plot (ms)
                          # self.SCROLLING_TIMESTAMP_PLOT_REFRESH_RATE = 1 / Desired Frequency (Hz) * 1000
                          # USE FOR TIMER.TIMER (ms)
                          self.SCROLLING_TIMESTAMP_PLOT_REFRESH_RATE = self.FREQUENCY * 1000
                  
                          self.DATA_POINTS_TO_DISPLAY = 200
                  
                          # Automatically pops from left if length is full
                          self.data = deque(maxlen=self.DATA_POINTS_TO_DISPLAY)
                  
                          # Create Plot Widget 
                          self.scrolling_timestamp_plot_widget = pg.PlotWidget(axisItems={'bottom': TimeAxisItem(orientation='bottom')})
                  
                          # Enable/disable plot squeeze (Fixed axis movement)
                          self.scrolling_timestamp_plot_widget.plotItem.setMouseEnabled(x=False, y=False)
                          self.scrolling_timestamp_plot_widget.setTitle('Scrolling Timestamp Plot Example')
                          self.scrolling_timestamp_plot_widget.setLabel('left', 'Value')
                          self.scrolling_timestamp_plot_widget.setLabel('bottom', 'Time (s)')
                  
                          self.scrolling_timestamp_plot = self.scrolling_timestamp_plot_widget.plot()
                          self.scrolling_timestamp_plot.setPen(246,212,255)
                  
                          self.layout = QtGui.QGridLayout()
                          self.layout.addWidget(self.scrolling_timestamp_plot_widget)
                  
                          self.read_position_thread()
                          self.start()
                  
                      def start(self):
                          """Update plot"""
                  
                          self.position_update_timer = QtCore.QTimer()
                          self.position_update_timer.timeout.connect(self.plot_updater)
                          self.position_update_timer.start(self.get_scrolling_timestamp_plot_refresh_rate())
                  
                      def read_position_thread(self):
                          """Read in data using a thread"""
                  
                          self.current_position_value = 0
                          self.position_update_thread = Thread(target=self.read_position, args=())
                          self.position_update_thread.daemon = True
                          self.position_update_thread.start()
                  
                      def read_position(self):
                          frequency = self.get_scrolling_timestamp_plot_frequency()
                          while True:
                              self.current_position_value = random.randint(1,101) 
                              time.sleep(frequency)
                  
                      def plot_updater(self):
                          self.data_point = float(self.current_position_value)
                  
                          self.data.append({'x': self.timestamp.elapsed(), 'y': self.data_point})
                          self.scrolling_timestamp_plot.setData(x=[item['x'] for item in self.data], y=[item['y'] for item in self.data])
                  
                      def clear_scrolling_timestamp_plot(self):
                          self.data.clear()
                  
                      def get_scrolling_timestamp_plot_frequency(self):
                          return self.FREQUENCY
                  
                      def get_scrolling_timestamp_plot_refresh_rate(self):
                          return self.SCROLLING_TIMESTAMP_PLOT_REFRESH_RATE
                  
                      def get_scrolling_timestamp_plot_layout(self):
                          return self.layout
                  
                      def get_current_position_value(self):
                          return self.current_position_value
                  
                      def get_scrolling_timestamp_plot_widget(self):
                          return self.scrolling_timestamp_plot_widget
                  
                  # Start Qt event loop unless running in interactive mode or using pyside
                  if __name__ == '__main__':
                      # Create main application window
                      app = QtWidgets.QApplication([])
                      app.setStyle(QtGui.QStyleFactory.create("Cleanlooks"))
                      mw = QtGui.QMainWindow()
                      mw.setWindowTitle('Scrolling Plot Example')
                  
                      # Create scrolling plot
                      scrolling_timestamp_plot_widget = ScrollingTimestampPlot()
                  
                      # Create and set widget layout
                      # Main widget container
                      cw = QtGui.QWidget()
                      ml = QtGui.QGridLayout()
                      cw.setLayout(ml)
                      mw.setCentralWidget(cw)
                  
                      # Can use either to add plot to main layout
                      #ml.addWidget(scrolling_timestamp_plot_widget.get_scrolling_timestamp_plot_widget(),0,0)
                      ml.addLayout(scrolling_timestamp_plot_widget.get_scrolling_timestamp_plot_layout(),0,0)
                      mw.show()
                  
                      if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
                          QtGui.QApplication.instance().exec_()
                  

                  PyQt4

                  from PyQt4 import QtCore, QtGui
                  from threading import Thread
                  from collections import deque
                  import pyqtgraph as pg
                  import numpy as np
                  import random
                  import sys
                  import time
                  
                  """Scrolling Timestamp Plot Widget Example"""
                  
                  class TimeAxisItem(pg.AxisItem):
                      """Internal timestamp for x-axis"""
                      def __init__(self, *args, **kwargs):
                          super(TimeAxisItem, self).__init__(*args, **kwargs)
                  
                      def tickStrings(self, values, scale, spacing):
                          """Function overloading the weak default version to provide timestamp"""
                  
                          return [QtCore.QTime().addMSecs(value).toString('mm:ss') for value in values]
                  
                  class ScrollingTimestampPlot(QtGui.QWidget):
                      """Scrolling plot widget with timestamp on x-axis and dynamic y-axis"""
                  
                      def __init__(self, parent=None):
                          super(ScrollingTimestampPlot, self).__init__(parent)
                  
                          # Internal timestamp for x-axis
                          self.timestamp = QtCore.QTime()
                          self.timestamp.start()
                  
                          # Desired Frequency (Hz) = 1 / self.FREQUENCY
                          # USE FOR TIME.SLEEP (s)
                          self.FREQUENCY = 0.025
                  
                          # Screen refresh rate to update plot (ms)
                          # self.SCROLLING_TIMESTAMP_PLOT_REFRESH_RATE = 1 / Desired Frequency (Hz) * 1000
                          # USE FOR TIMER.TIMER (ms)
                          self.SCROLLING_TIMESTAMP_PLOT_REFRESH_RATE = self.FREQUENCY * 1000
                  
                          self.DATA_POINTS_TO_DISPLAY = 200
                  
                          # Automatically pops from left if length is full
                          self.data = deque(maxlen=self.DATA_POINTS_TO_DISPLAY)
                  
                          # Create Plot Widget 
                          self.scrolling_timestamp_plot_widget = pg.PlotWidget(axisItems={'bottom': TimeAxisItem(orientation='bottom')})
                  
                          # Enable/disable plot squeeze (Fixed axis movement)
                          self.scrolling_timestamp_plot_widget.plotItem.setMouseEnabled(x=False, y=False)
                          self.scrolling_timestamp_plot_widget.setTitle('Scrolling Timestamp Plot Example')
                          self.scrolling_timestamp_plot_widget.setLabel('left', 'Value')
                          self.scrolling_timestamp_plot_widget.setLabel('bottom', 'Time (s)')
                  
                          self.scrolling_timestamp_plot = self.scrolling_timestamp_plot_widget.plot()
                          self.scrolling_timestamp_plot.setPen(246,212,255)
                  
                          self.layout = QtGui.QGridLayout()
                          self.layout.addWidget(self.scrolling_timestamp_plot_widget)
                  
                          self.read_position_thread()
                          self.start()
                  
                      def start(self):
                          """Update plot"""
                  
                          self.position_update_timer = QtCore.QTimer()
                          self.position_update_timer.timeout.connect(self.plot_updater)
                          self.position_update_timer.start(self.get_scrolling_timestamp_plot_refresh_rate())
                  
                      def read_position_thread(self):
                          """Read in data using a thread"""
                  
                          self.current_position_value = 0
                          self.position_update_thread = Thread(target=self.read_position, args=())
                          self.position_update_thread.daemon = True
                          self.position_update_thread.start()
                  
                      def read_position(self):
                          frequency = self.get_scrolling_timestamp_plot_frequency()
                          while True:
                              self.current_position_value = random.randint(1,101) 
                              time.sleep(frequency)
                  
                      def plot_updater(self):
                          self.data_point = float(self.current_position_value)
                  
                          self.data.append({'x': self.timestamp.elapsed(), 'y': self.data_point})
                          self.scrolling_timestamp_plot.setData(x=[item['x'] for item in self.data], y=[item['y'] for item in self.data])
                  
                      def clear_scrolling_timestamp_plot(self):
                          self.data.clear()
                  
                      def get_scrolling_timestamp_plot_frequency(self):
                          return self.FREQUENCY
                  
                      def get_scrolling_timestamp_plot_refresh_rate(self):
                          return self.SCROLLING_TIMESTAMP_PLOT_REFRESH_RATE
                  
                      def get_scrolling_timestamp_plot_layout(self):
                          return self.layout
                  
                      def get_current_position_value(self):
                          return self.current_position_value
                  
                      def get_scrolling_timestamp_plot_widget(self):
                          return self.scrolling_timestamp_plot_widget
                  
                  # Start Qt event loop unless running in interactive mode or using pyside
                  if __name__ == '__main__':
                      # Create main application window
                      app = QtGui.QApplication([])
                      app.setStyle(QtGui.QStyleFactory.create("Cleanlooks"))
                      mw = QtGui.QMainWindow()
                      mw.setWindowTitle('Scrolling Plot Example')
                  
                      # Create scrolling plot
                      scrolling_timestamp_plot_widget = ScrollingTimestampPlot()
                  
                      # Create and set widget layout
                      # Main widget container
                      cw = QtGui.QWidget()
                      ml = QtGui.QGridLayout()
                      cw.setLayout(ml)
                      mw.setCentralWidget(cw)
                  
                      # Can use either to add plot to main layout
                      #ml.addWidget(scrolling_timestamp_plot_widget.get_scrolling_timestamp_plot_widget(),0,0)
                      ml.addLayout(scrolling_timestamp_plot_widget.get_scrolling_timestamp_plot_layout(),0,0)
                      mw.show()
                  
                      if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
                          QtGui.QApplication.instance().exec_()
                  

                  这篇关于如何使用pyqtgraph TimeAxisItem使X轴时间动态刷新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:使用 pyqtgraph 和线程的实时绘图 下一篇:PyQt:如何从 Qt Designer 加载多个 .ui 文件

                  相关文章

                  最新文章

                  1. <legend id='u978h'><style id='u978h'><dir id='u978h'><q id='u978h'></q></dir></style></legend>

                      <bdo id='u978h'></bdo><ul id='u978h'></ul>

                    1. <i id='u978h'><tr id='u978h'><dt id='u978h'><q id='u978h'><span id='u978h'><b id='u978h'><form id='u978h'><ins id='u978h'></ins><ul id='u978h'></ul><sub id='u978h'></sub></form><legend id='u978h'></legend><bdo id='u978h'><pre id='u978h'><center id='u978h'></center></pre></bdo></b><th id='u978h'></th></span></q></dt></tr></i><div id='u978h'><tfoot id='u978h'></tfoot><dl id='u978h'><fieldset id='u978h'></fieldset></dl></div>
                    2. <tfoot id='u978h'></tfoot>

                      <small id='u978h'></small><noframes id='u978h'>