You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于VISSIM仿真CSV数据绘制时空图(TSD)的技术求助

VISSIM CSV数据生成时空图(TSD)问题修正

问题描述

我是编程新手,需要从VISSIM仿真导出的CSV文件生成时空图(TSD)。计划把CSV中的VEHICLE:SIMSEC作为TSD的X轴(仿真时间),NO(共185辆车辆)对应每条折线代表的车辆,COORDFRONTX与COORDFRONTY作为Y轴位置。试了下面的Python代码,但生成的散点图完全没法解读,附上代码和CSV前20行数据,求指导修正得到正确的TSD。

原尝试代码

import pandas as pd
import matplotlib.pyplot as mp

# take data
data = pd.read_csv(r"C:\Users\hk385\Desktop\VISSIM_DATA_CSV.csv")

df = pd.DataFrame(data, columns=["VEHICLE:SIMSEC", "NO", "DISTTRAVTOT"])

# plot the dataframe
df.plot(x="NO", y=["DISTTRAVTOT"], kind="scatter")

# print bar graph
mp.show()

CSV前20行数据

VEHICLE:SIMSEC,NO,LANE\LINK\NO,LANE\INDEX,POS,POSLAT,COORDFRONTX,COORDFRONTY,COORDREARX,COORDREARY,DISTTRAVTOT
5.9,1,1,1,2.51,0.5,-1.259,-3.518,-4.85,-1.319,8.42
6.0,1,1,1,10.94,0.5,0.932,-4.86,-2.659,-2.661,16.86
6.1,1,1,1,19.37,0.5,3.125,-6.203,-0.466,-4.004,25.29
6.2,1,1,1,27.82,0.5,5.319,-7.547,1.728,-5.348,33.73
6.3,1,1,1,36.26,0.5,7.515,-8.892,3.924,-6.693,42.18
6.4,1,1,1,44.72,0.5,9.713,-10.238,6.122,-8.039,50.64
6.5,1,1,1,53.18,0.5,11.912,-11.585,8.321,-9.386,59.1
6.6,1,1,1,61.65,0.5,14.112,-12.933,10.521,-10.734,67.56
6.7,1,1,1,70.12,0.5,16.314,-14.282,12.724,-12.082,76.04
6.8,1,1,1,78.6,0.5,18.518,-15.632,14.927,-13.432,84.51
6.9,1,1,1,87.08,0.5,20.723,-16.982,17.132,-14.783,93.0
7.0,1,1,1,95.57,0.5,22.93,-18.334,19.339,-16.135,101.49
7.1,1,1,1,104.07,0.5,25.138,-19.687,21.547,-17.487,109.99
7.2,1,1,1,112.57,0.5,27.348,-21.04,23.757,-18.841,118.49
7.3,1,1,1,121.08,0.5,29.56,-22.395,25.969,-20.195,127.0
7.4,1,1,1,129.59,0.5,31.773,-23.75,28.182,-21.551,135.51
7.5,1,1,1,138.11,0.5,33.987,-25.107,30.396,-22.907,144.03
7.6,1,1,1,146.64,0.5,36.203,-26.464,32.612,-24.264,152.56
7.7,1,1,1,155.17,0.5,38.421,-27.822,34.83,-25.623,161.09

修正方案

原代码的核心问题:

  • 选错了Y轴数据:用了DISTTRAVTOT而非你需要的COORDFRONTX/COORDFRONTY
  • 坐标轴逻辑错误:把车辆编号NO设为X轴,和你要的「X轴是仿真时间、单辆车对应一条折线」完全相反
  • 图表类型错误:散点图不适合展示单辆车随时间的连续位置变化,应该用折线图

修正后的代码

import pandas as pd
import matplotlib.pyplot as plt

# 读取CSV,只保留需要的列,减少内存占用
data = pd.read_csv(r"C:\Users\hk385\Desktop\VISSIM_DATA_CSV.csv", 
                   usecols=["VEHICLE:SIMSEC", "NO", "COORDFRONTX", "COORDFRONTY"])

# 创建画布,设置合适大小
plt.figure(figsize=(12, 8))

# 按车辆编号分组,为每辆车绘制时间-位置折线
for vehicle_id, group in data.groupby("NO"):
    # 先按仿真时间排序,确保折线顺序正确
    sorted_group = group.sort_values("VEHICLE:SIMSEC")
    # 绘制仿真时间 vs 车辆前部X坐标的折线,需要Y坐标就换成COORDFRONTY
    plt.plot(sorted_group["VEHICLE:SIMSEC"], sorted_group["COORDFRONTX"], 
             label=f"车辆{vehicle_id}", linewidth=0.8)

# 设置图表基础属性
plt.xlabel("仿真时间 (秒)")
plt.ylabel("车辆前部X坐标")
plt.title("车辆时空图(仿真时间 vs X坐标)")
# 185辆车的图例会非常挤,不需要的话可以注释掉下面一行
# plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.grid(True, alpha=0.3)

# 调整布局,防止坐标轴标签被截断
plt.tight_layout()
plt.show()

额外说明

  • 如果需要展示车辆的Y坐标,只需把代码中的COORDFRONTX替换为COORDFRONTY即可
  • 185辆车全部绘制会比较密集,可以调小linewidth(比如设为0.5),或者先选部分车辆测试(比如data[data["NO"] <= 10].groupby("NO"))
  • 如果还是想用行驶总距离DISTTRAVTOT作为Y轴,逻辑完全一致,只需把COORDFRONTX换成DISTTRAVTOT即可

内容的提问来源于stack exchange,提问作者Hyun Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:54:36