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

Pyplot绘制DataFrame时生成单条连续线而非多条独立线问题

解决Matplotlib绘制车辆轨迹时线条相互连接的问题

你遇到的问题是因为数据切片方式错误,导致每次plt.plot()调用时传入的不是单个车辆的轨迹数据,而是包含了之前所有车辆的数据,最终所有轨迹被连成了一条线。

方法1:修正索引切片逻辑

如果你的lane2是(Vehicle_ID, Frame_ID)的多级索引结构,原代码中slice(id)的切片方式会匹配所有索引级别中符合条件的数据,而非仅当前Vehicle_ID的数据。修改循环内的切片逻辑即可:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(16,6))
# 简化数据筛选:直接用Frame_ID <=1500,避免复杂的loc切片
lane2 = trajec.loc[trajec.Lane_ID == 2].query('Frame_ID <= 1500').sort_values(by=['Vehicle_ID', 'Frame_ID'])

for vehicle_id in lane2.index.get_level_values(0).unique():
    # 直接用.loc[vehicle_id]获取单个车辆的所有轨迹数据
    vehicle_data = lane2.loc[vehicle_id]
    plt.plot(vehicle_data.index, vehicle_data['ewm_y'])

plt.show()

方法2:用groupby更直观处理

通过groupby('Vehicle_ID')直接按车辆分组,避免索引切片出错,代码可读性更高:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(16,6))
lane2 = trajec.loc[trajec.Lane_ID == 2].query('Frame_ID <= 1500').sort_values(by=['Vehicle_ID', 'Frame_ID'])

# 按Vehicle_ID分组,遍历每个车辆的轨迹数据
for _, vehicle_traj in lane2.groupby('Vehicle_ID'):
    plt.plot(vehicle_traj['Frame_ID'], vehicle_traj['ewm_y'])

plt.show()

原代码出错原因

原代码中lane2['ewm_y'].loc[slice(id)]会选取索引中第一个级别小于等于id的所有数据(比如循环到第二个车辆ID时,会包含第一个和第二个车辆的所有数据),导致每次plt.plot()都在绘制累积的轨迹,最终所有线条被意外连接在一起。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:23:27