[英]Plot n animated growing line plots on the same graph (matplotlib, python)
[英]what is the best way to plot the most recent value that is being stored in csv using python? The below code plots graph but want line by line
plt.rcParams["figure.figsize"]=[7.00,3.50]
plt.rcParams["figure.autolayout"]=True
df=pd.read_csv('C:\\data.csv',names=('x','xl','y','z','fe','ti','ge','sd'))
plt.plot(df.xl, df.y)
plt.xlabel("xlabel")
plt.ylabel=("ylabel")
plt.show()
我想在代码写入 csv 文件时绘制一个实时图表。 上面的代码绘制了图形,但接收了整个文件并立即绘制它。 逐行寻找一些东西,应该看起来像活的。 这些值从 arduino 串行存储在 CSV 中。
您可以使用带有选项iterator=True, chunksize=1
的read_csv
读取
import pandas as pd
for line in pd.read_csv('data.csv', iterator=True, chunksize=1):
print(line)
print('---')
它需要在for
-loop 之前和for
-loop 内部创建绘图,它需要使用特殊方法向现有绘图添加新值(类似于plt.xdata()
)
编辑:
从文件中读取随机数据的最小工作代码。 但是我不知道当程序必须等待文件中的数据时它将如何工作。 当文件中没有更多数据并且需要不同的方法来完成时,它可能会完成for
-loop。 当文件较大时,可能需要检查文件大小并读取新数据
我使用io.StringIO(text)
创建每个人都可以简单地编写和运行的示例。 你应该使用你的filename
而不是io.StringIO()
# --- create random data for example ---
import random
random.seed(0)
data = [(x, random.randint(-10, 10)) for x in range(100)]
text = "\n".join(f'{x},{y}' for x, y in data)
# --- code ---
import pandas as pd
import numpy as np
import io
import time
import matplotlib.pyplot as plt
line, = plt.plot([], []) # create empty plot, has to be `,` after `line`
plt.xlim(0, 100) # show all area for plot data
plt.ylim(-10, 10) # show all area for plot data
plt.show(block=False) # don't block code - so next lines can run
plt.pause(.001) # time to update window
#for part in pd.read_csv("filename.csv", iterator=True, chunksize=1, names=['x' ,'y']):
for part in pd.read_csv(io.StringIO(text), iterator=True, chunksize=1, names=['x' ,'y']):
x = np.append(line.get_xdata(), part.x)
y = np.append(line.get_ydata(), part.y)
line.set_xdata(x)
line.set_ydata(y)
#print('x:', x)
#print('y:', y)
#print('---')
plt.draw() # inform plot to update window
plt.pause(.001) # time to update window
time.sleep(0.25)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.