如何为车辆速度时间序列图按电池状态绘制双色标签
修正代码实现方案
原有代码直接对Battery_Status == 1的过滤子集绘图,会把非连续的状态1点强行连通,且未指定状态0区间的绿色样式,可按如下方式调整:
首先对数据集做预处理,标记连续的相同电池状态区间:
import seaborn as sns import matplotlib.pyplot as plt import pandas as pd from matplotlib.lines import Line2D # 为每一段连续的相同电池状态分配唯一分组ID,避免跨状态区间连线 trip_1567['status_group'] = (trip_1567['Battery_Status'].diff() != 0).cumsum()
然后按分组绘制不同颜色的时间序列:
fig = plt.figure(figsize=(35,5)) # 若不需要1行2列的子图布局,可将121改为111 ax = plt.subplot(121) # 遍历每个连续状态分组绘图 for _, group_data in trip_1567.groupby('status_group'): current_status = group_data['Battery_Status'].iloc[0] line_color = 'red' if current_status == 1 else 'green' sns.lineplot(x='index', y='VehicleSpeed_km_h_', data=group_data, color=line_color, ax=ax) # 添加自定义图例 custom_legend = [ Line2D([0], [0], color='green', lw=2), Line2D([0], [0], color='red', lw=2) ] ax.legend(custom_legend, ['未充电(电池状态=0)', '充电中(电池状态=1)']) ax.set_xlabel('离散时间') ax.set_ylabel('车辆速度(km/h)') plt.show()
核心逻辑说明
- 用差分+累加的方式生成连续状态分组ID,确保每个分组内的电池状态一致且时序连续,不会出现跨区间的错误连线
- 每个分组单独绘制线段,根据状态值自动匹配对应颜色
- 自定义图例可明确两种颜色的业务含义,也可根据需求删除对应代码
内容的提问来源于stack exchange,提问作者Jonathan Cauchi
相关产品推荐
相关产品推荐

