【发布时间】:2015-11-02 12:18:09
【问题描述】:
我正在尝试使用 Matplotlib 来可视化一些测量结果。测量通常持续约 24 小时,并将在 csv 中包含约 30k 行数据。我一直在努力让我的情节真正动画化。我可以执行代码,它会显示截至当前时间点的快照,但仅此而已。当我尝试自动缩放它时,没有任何绘图,它只是默认为两个轴上的 -.6 到 +.6 的视图。我应该调用 plt.draw() 来让它工作吗?这是我目前所拥有的:
import numpy as np
import datetime as dt
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import animation
FMT = '%Y-%m-%d %H:%M:%S.%f'
data = np.genfromtxt('sampleData.csv', delimiter=',', skip_header=5,
names=['x', 'y', 'z', 'w'], dtype=['object', 'int8', 'int8', 'float'])
mytime = [dt.datetime.strptime(i.decode('ascii'), FMT) for i in data['x']]
thickness = data['w']
fig = plt.figure()
axes = fig.add_subplot(111)
line, = axes.plot([], [], '.')
plt.show(block=False)
def init():
line.set_data([],[])
return line,
fig.canvas.draw()
def animate(i):
xdata = mytime[:i]
ydata = thickness[:i]
line.set_data(xdata, ydata)
plt.draw()
axes.relim()
axes.autoscale(True,'both',True)
axes.autoscale_view(True,True,True)
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init,
interval=0, blit=True)
plt.show()
这是来自 CSV 的数据示例行:
2013-09-25 14:51:15.329091,1,0,439.80,,,,0,0,
【问题讨论】:
-
你的意思是还有数据传入并且情节没有更新吗?或者您想要现有数据的移动动画?
-
有数据进来,直到我停止它。我相信我已经让它工作了,但它的绘图速度太慢了。我正在以大约 60Hz 的频率进行测量,现在我看着这个我不确定 matplotlib 能否跟上。有什么建议吗?
-
一方面,如果我通过 CSV 文件传递所有数据,我不会期望能够管理这样的速度。 (注意:你实际上并没有回答我的问题,如果你改进了代码,你还没有更新问题中的文字。没有帮助。)
-
目前还不清楚您要在这里实现什么,所以我将尝试改写@cphlewis 的问题。您说您正在使用 CSV 文件。这意味着现有的静态数据存储。然后您使用
animation并谈论一段时间内的传入数据,这意味着输入数据流。那么 - 你能解释发生了什么 - 是否有另一个过程不断附加/替换.csv并且你想在新数据进入时更新绘图?或者您想对csv中的数据进行动画处理,就好像它是“实时”传入的?还是别的什么? -
对不起,伙计们,我看到了混乱。我的测量程序不断写入 .csv。它不会更改以前的数据,只是逐行添加。我正在尝试显示不断增长的数据的实时视觉效果。我看到的问题是,在最初的 15 或 20 秒后,视觉效果会大大减慢,直至基本上停止。
标签: python csv python-3.x matplotlib