我正在尝试使用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文件通常的外观。
显然,该文件未正确解析,因为它不在第一列中,并且数据之间存在空格,并且使用动画时出现x,y的错误,无法解包。
感谢您对正确解析文件和实时绘制数据的任何帮助。
答案 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()