我已经为此寻找了几个小时的答案,但找不到我要找的东西。我正在尝试使用 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,因此时机不对。这些值是从传感器记录的。我有一个传感器的视频,可以重现发生的事情。但为此,时间轴必须相同。
对此的任何帮助将不胜感激!
问候丽莎