如何按状态分组绘制时序数据速度对比图并对齐时间起点
不同Status分组的速度时间折线图实现(统一时间起点)
数据示例
假设你的DataFrame结构如下(补充部分示例数据方便测试):
import pandas as pd data = { 'speed': [20, 30, 10, 15, 25, 8], 'status': [True, True, False, False, True, False], 'timestamp': ['9/10/2022 08:00', '9/10/2022 09:00', '9/08/2022 07:00', '9/09/2022 08:00', '9/10/2022 10:00', '9/09/2022 09:00'] } df = pd.DataFrame(data)
实现步骤
1. 预处理数据:统一时间起点
先把时间列转成标准datetime格式,再找到两组status数据的最晚起始时间作为统一起点,过滤掉早于该时间的所有记录:
# 转换时间列为datetime类型,匹配你的时间格式 df['timestamp'] = pd.to_datetime(df['timestamp'], format='%m/%d/%Y %H:%M') # 获取两组status的最早时间,取最大值作为统一起始点 true_min_time = df[df['status'] == True]['timestamp'].min() false_min_time = df[df['status'] == False]['timestamp'].min() unified_start_time = max(true_min_time, false_min_time) # 过滤数据,只保留统一起点之后的记录 filtered_df = df[df['timestamp'] >= unified_start_time]
2. 分组绘制折线图
用matplotlib绘制,自动用不同颜色区分两组,同时添加图例和坐标轴标签:
import matplotlib.pyplot as plt plt.figure(figsize=(10, 6)) # 按status分组遍历绘图 for status, group in filtered_df.groupby('status'): plt.plot(group['timestamp'], group['speed'], label=f"Status: {status}", marker='o') # 图表样式设置 plt.xlabel('时间') plt.ylabel('速度') plt.title('不同Status下速度随时间变化对比(统一时间起点)') plt.legend() plt.xticks(rotation=45) # 旋转x轴标签避免重叠 plt.tight_layout() # 自动调整布局 plt.show()
关键说明
- 统一时间起点的逻辑:取两组数据最早时间的最大值,确保两组数据都从这个时间点开始展示,不会出现某组数据提前出现的情况。
- 如果你的时间格式和示例不同,修改
pd.to_datetime的format参数即可(比如时间是9/10/2022不带时分,就用%m/%d/%Y)。 - 颜色可以自定义,给
plot方法加color参数指定颜色值(如color='#ff0000')即可。
内容的提问来源于stack exchange,提问作者prof31
相关产品推荐
相关产品推荐

