with open(file_name, 'r') as file: next(file) # 跳过标题行 # 解析轨迹数据 data = file.readlines() time = [line.split(',')[1] for line in data] longitude = [float(line.split(',')[2]) for line in data] latitude = [float(line.split(',')[3]) for line in data] speed = [int(line.split(',')[5]) for line in data] #筛选固定时段的记录 k = 0 head_time = '2011/04/20 06:29:59' end_time = '2011/04/20 09:30:01' #record = [[time[0], longitude[0], latitude[0], speed[0]] * len(longitude)] record = [[time[0], longitude[0], latitude[0], speed[0]] for _ in range(len(longitude))] #print(record) for i in range(len(longitude)): if time[i] < end_time and time[i] >head_time: record[k] = [time[i], longitude[i], latitude[i], speed[i]] #record[k] = data[i] k = k+1 #print(k) #print(record[:k]) record = record[:k] # 绘制指定车辆的动态轨迹 trajectory_line, = ax.plot([], [], color='red', linewidth=1) # 设置车速显示框位置 speed_text = ax.text(0.95, 0.05, '', transform=ax.transAxes, ha='right', va='bottom') time_text = ax.text(0.05, 0.95, '', transform=ax.transAxes, ha='left', va='top') # 初始化动画函数 def animate(frame): ''' # 更新车辆轨迹 trajectory_line.set_data(longitude[:frame], latitude[:frame]) # 更新实时车速显示 speed_text.set_text(f'车速: {speed[frame]} km/h') time_text.set_text(f'时间:{time[frame]}') ''' # 更新车辆轨迹 trajectory_line.set_data(record[:frame][1], record[:frame][2]) # 更新实时车速显示 speed_text.set_text(f'车速: {record[:frame][3]} km/h') time_text.set_text(f'时间:{record[:frame][0]}') # 创建动画 anim = animation.FuncAnimation(fig, animate, frames=len(record), interval=200, blit=False) # 显示动画 plt.show()
时间: 2024-04-15 18:28:54 浏览: 113
R_W_Copy_TextFile.rar_R中file.copy
根据你提供的代码,我看到你已经对记录进行了筛选,并将筛选后的记录存储在了`record`列表中。然后,在动画函数`animate()`中,你尝试使用`record[:frame][1]`和`record[:frame][2]`来获取经度和纬度信息,以更新车辆轨迹的坐标。然后你使用`record[:frame][3]`来获取车速信息。但是,这里出现了一个错误。
`record[:frame]`返回一个切片,它是一个包含`frame`之前的元素的新列表。然后,你尝试通过索引1和2来访问经度和纬度信息,以及索引3来访问车速信息。然而,这样的索引操作不适用于列表切片。
为了解决这个问题,你可以使用`record[frame]`来直接访问特定帧的记录,并获取所需的经度、纬度和车速信息。以下是修改后的代码示例:
```python
# 更新车辆轨迹
trajectory_line.set_data(record[:frame, 1], record[:frame, 2])
# 更新实时车速显示
speed_text.set_text(f'车速: {record[frame, 3]} km/h')
time_text.set_text(f'时间:{record[frame, 0]}')
```
请注意,这里使用了索引操作符`[]`而不是切片操作符`[:]`。这样可以直接访问特定帧的记录,并获取所需的信息。
请尝试使用这个修改后的代码,并检查是否能够正确地更新车辆轨迹和实时车速显示。如有其他问题,请随时提问。
阅读全文