1

我已经为此寻找了几个小时的答案,但找不到我要找的东西。我正在尝试使用 matplotlib 为 .csv 文件中的数据设置动画。第一列是时间,从 0 开始。问题是,时间步长之间的间隔发生了变化。

在此处输入图像描述

...

我正在尝试为第 2、3、4 和 5 列与时间(第 1 列)制作动画。由于 .csv 非常大,我使用生成器函数来生成行。相关代码为:

  def update(self, args):
    level = args[5]

    self.t = args[0]
    self.tdata.append(self.t)

    self.level_title.set_position((self.tdata[0], 3.5))
    self.time_title.set_position((self.tdata[0], 700000))
    if self.count % 10 == 0:
        self.level_title.set_text("  Level: {:.2f}ml".format(level))
        self.time_title.set_text("  Time: {:.2f}s".format(self.t))
    self.count += 1
    self.ax.set_xlim(self.tdata[0], self.tdata[-1])
    self.ydata.append(args[4] - CALIBRATED_EMPTY_LEVEL)
    self.ydata1.append(args[3] - CALIBRATED_EMPTY_LIQUID)
    self.ydata2.append(args[2] - CALIBRATED_EMPTY_ENVIRONMENT)
    self.y2data.append(level)
    self.line.set_data(self.tdata, self.ydata)
    self.line1.set_data(self.tdata, self.ydata1)
    self.line2.set_data(self.tdata, self.ydata2)
    self.line2ax.set_data(self.tdata, self.y2data)

    return self.line, self.line1, self.line2, self.line2ax, self.level_title, self.time_title


def getData():
    with open("data.csv", "r") as f:
        reader = csv.reader(f)
        for row in reader:
            yield np.array(row, dtype=np.float)


def main():
    fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
    ax1.plot(Animated=True)
    ax2.plot(Animated=True)
    scope = Scope(ax1, ax2)

ani = animation.FuncAnimation(fig, scope.update, getData, interval=10,
                              blit=True, repeat=False, save_count=110271)

#plt.show()
mywriter = animation.FFMpegWriter(fps=100)
ani.save('dataplot.mp4', writer=mywriter)

这很好用,用于生成动画并将其保存为 mp4。但是,由于间隔设置为 10,因此时机不对。这些值是从传感器记录的。我有一个传感器的视频,可以重现发生的事情。但为此,时间轴必须相同。

对此的任何帮助将不胜感激!

问候丽莎

4

1 回答 1

0

正如 Paul Brodersen 在评论中提出的那样,我最终以固定的时间步长对我的数据进行了插值。

于 2021-03-18T09:39:01.203 回答