读取nd.csv,并将这个129行1列的数据,看作是129s的数据,按每秒一个读取,画折线图,要求折线图为每秒一变的动画,x轴只有十个时间点,且为此时的实时时间。每次更新新的时间点的数据,动画都将折线图上最老的时间点及对应时间的数据清除,跑完129S数据后,停止。给出完整的程序
时间: 2024-09-09 18:02:20 浏览: 31
为了帮助您完成这个任务,我们将使用Python的`pandas`, `matplotlib`, 和 `datetime` 库。首先,假设您的数据文件名为`nd.csv`,并已经安装了所需的库。以下是完整的代码示例:
```python
import pandas as pd
import matplotlib.pyplot as plt
import datetime
from FuncAnimation import FuncAnimation
# 读取数据
df = pd.read_csv('nd.csv')
# 初始化数据列表,用于动态更新折线图
data_points = []
for i in range(10): # 只显示前10个时间点
data_points.append([])
# 设置初始时间点和线条
start_time = datetime.datetime.now()
fig, ax = plt.subplots()
line, = ax.plot([], [], 'o-', animated=True)
ax.set_xlim([start_time, start_time + datetime.timedelta(seconds=10)])
ax.set_xticks([start_time + datetime.timedelta(seconds=i) for i in range(11)])
def animate(i):
global line, df, data_points
if i >= len(df):
return line,
# 获取最新一秒的数据点
time_point = start_time + datetime.timedelta(seconds=i)
current_data = df.iloc[i, 0]
# 清除旧的数据点
for j in range(len(data_points)):
ax.lines.remove(line)
data_points.pop(0)
# 添加新数据点
data_points.append([(time_point, current_data)])
line.set_data(*zip(*data_points[-1]))
ax.relim()
ax.autoscale_view()
ani = FuncAnimation(fig, animate, frames=len(df), interval=1000, blit=True)
plt.show()
```
这段代码首先读取CSV文件并将数据存储在DataFrame中。然后,它创建了一个空的动画列表`data_points`来存储每个时间点的数据。`animate`函数会根据索引i从数据帧中获取相应时间点的数据,删除最旧的数据点,并将其添加到折线图上。动画会在每秒钟更新一次,直到129秒数据全部处理完毕。
阅读全文