我是Matplotlib和python的新手。
C:\>typeperf "\Procesador(_Total)\% de tiempo de procesador" > C:\Users\hb\Documents\Scripts\log.csv
"07/18/2018 15:50:55.574","3.429826"
"07/18/2018 15:50:56.577","0.307183"
"07/18/2018 15:50:57.589","18.932128"
同时-在同一台机器上-我运行的代码基本上读取了CSV并生成了一个实时绘图(有效!)
每1秒钟用一条新线绘制绘图。
目标:使图表仅显示捕获的最后60秒,并继续处理CSV中的新数据。
我已经阅读了pyplot文档,并尝试了.clf()和.clear(),但是没有运气。这只是我遇到困难的那部分代码:
def animate(i):
with open(data_in, 'r', newline='') as f_input:
x, y = [], []
end_t = time.time() + 60
while time.time() < end_t:
for line in range(2):
next(f_input)
for row in csv.reader(f_input):
if row:
x.append(datetime.strptime(row[0], '%m/%d/%Y %H:%M:%S.%f'))
y.append(float(row[1]))
ax1.clear()
plt.title('system\n')
plt.xlabel('Current Time')
plt.ylabel('Current HTTP Connections\n')
ax1.plot(x,y)
time_format = DateFormatter('%H:%M:%S')
plt.gca().xaxis.set_major_formatter(time_format)
start += 1
data_out = animation.FuncAnimation(fig, animate, interval=1000)
plt.show()
我尝试了while循环,以尝试使绘图仅读取该时间段。它不起作用。
您能指出我正确的路线吗?
谢谢
答案 0 :(得分:0)
X和Y当前包含.csv文件中的所有时间步和值。只能完全绘制最后60个值,而不能完全绘制X和Y:
if len(x) < 60:
ax1.plot(x,y)
else:
ax1.plot(x[60:],y[60:])
随着.csv文件日复一日地增长,这种方法可能变得很麻烦。在这种情况下,应立即刷新(和归档)文件,然后再进行修复。