从CSV文件实时绘制数据图形

时间:2018-08-29 17:47:53

标签: python csv matplotlib plot tkinter

我正在尝试使用CSV文件中的动画来实时绘制(或动态显示)数据的图形,该CSV文件是我通过从仪器通过TCP接收数据而写入的。

这是我的代码:

def animate(i):
  xs = []
  ys = []
  with open('C:/Users/aeros/Desktop/flashDump.csv') as graph_data:
    for line in graph_data:
        if not line.strip():
            continue
        if len(line) > 1:
            line.split(" ")
            x, y = line.split(',')
            xs.append(x)
            ys.append(y)
ax1.clear()
ax1.plot(xs, ys)

然后在我的GUI tkinter mainloop中调用它

    ani = animation.FuncAnimation(fig, animate, interval = 1000)
    plt.show()

这是我向其中写入数据时CSV文件通常的外观。

enter image description here

显然,该文件未正确解析,因为它不在第一列中,并且数据之间存在空格,并且使用动画时出现x,y的错误,无法解包。

感谢您对正确解析文件和实时绘制数据的任何帮助。

1 个答案:

答案 0 :(得分:0)

我相信您的问题就在这里:

if len(line) > 1:
    line.split(" ")
    x, y = line.split(',') # specifically this line.
    xs.append(x)
    ys.append(y)

如果您每行仅使用一个逗号,则x, y = split(',')可以工作,因为您将创建一个2索引列表,并且每个索引都将分配给x和y,但是更大的值在这里不起作用。

更新:

使用CSV格式是一种更好的选择。

首先,我们需要rstrip()行。这样做是从行中删除\n。稍后会有所帮助。

接下来,我们需要做split(",")来创建我们的列表。该列表将具有3个索引点。 B列的第一个值是C列的空字符串,D列的第二个值是D列。然后,您可以将索引分配给其他每个列表。

def animate():
    xs = []
    ys = []
    with open('flashDump.csv') as graph_data:
        for line in graph_data:
            rstriped = line.rstrip()
            if len(rstriped) > 1:
                line_list = rstriped.split(",")
                xs.append(line_list[0])
                ys.append(line_list[2])
                print(xs, ys)

animate()