以实时方式更改 matplotlib 图形的时间尺度

Changing the time scale of a matplotlib graph in a real-time fashion

我正在制作一个实时绘图应用程序 sensor data in a real-time fashion.

将数据保存到 .csv 文件并使用 matplotlib 按以下方式绘制图表:

class Scope:
    def __init__(self, ax, ax2, f, maxt=2000, dt=0.02): 
      self.ax = ax
      self.ax2 = ax2
      self.maxt = maxt
      self.f = f
      self.tdata = []
      self.ydata = []
      self.humdata = []
      self.tempdata = []
      self.TVOCdata = []
      self.ax.set_ylim(0, 1023)
      self.ax.set_xlim(0, self.maxt)
      self.ax2.set_ylim(0, 100)
      self.ax2.set_xlim(0, self.maxt) 

      self.line, = ax.plot(self.tdata, self.ydata)
      self.line2, = ax2.plot(self.tdata, self.humdata)
      self.line3, = ax2.plot(self.tdata, self.tempdata, 'g-')
      self.line4, = ax.plot(self.tdata, self.TVOCdata)

    def animate(self, y):
      if path.exists(self.f):
        data = pd.read_csv(self.f)
        self.tdata.append(data['dur'].iloc[-1])
        self.ydata.append(data['CO2'].iloc[-1])
        self.line.set_data(self.tdata, self.ydata)                                                                                                                                                      
        self.line.set_label('CO2')

我想将时间轴的表示从秒更改为小时,因为我正在进行的测量可能一次持续数天。有没有方便的方法来做到这一点?非常感谢任何形式的帮助。

已找到解决此问题的方法。关键是使用自动收报机 FuncFormatter-subclass 按以下方式自定义 x-axis 中的刻度:

formatter = matplotlib.ticker.FuncFormatter(lambda s, x: time.strftime('%H:%M',time.gmtime(s // 60)))
   
self.ax.xaxis.set_major_formatter(mticker.FuncFormatter(formatter))