Pyplot仅显示绘图的最后60秒

时间:2018-07-19 14:26:34

标签: python matplotlib

我是Matplotlib和python的新手。

  • 我在运行typeperf.exe的Windows上,基本上使用cli实时读取处理器信息:

C:\>typeperf "\Procesador(_Total)\% de tiempo de procesador" > C:\Users\hb\Documents\Scripts\log.csv

  • 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循环,以尝试使绘图仅读取该时间段。它不起作用。

您能指出我正确的路线吗?

谢谢

1 个答案:

答案 0 :(得分:0)

X和Y当前包含.csv文件中的所有时间步和值。只能完全绘制最后60个值,而不能完全绘制X和Y:

if len(x) < 60:
    ax1.plot(x,y)
else:
    ax1.plot(x[60:],y[60:])

随着.csv文件日复一日地增长,这种方法可能变得很麻烦。在这种情况下,应立即刷新(和归档)文件,然后再进行修复。