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
相关产品推荐
相关产品推荐

