如何基于开关状态与时间戳用Plotly绘制锅炉运行甘特图?
锅炉运行时间线甘特图实现方案
1. 状态序列转运行区间数据
原始数据是时间点对应的锅炉状态(1.0=开启,0.0=关闭),而Plotly甘特图需要明确的起止时间区间,所以第一步要把连续的运行状态转换成时间段。假设预处理后的DataFrame包含timestamp(合并后的完整时间戳)和boiler_status(状态值)列,执行以下代码:
import pandas as pd # 确保数据按时间排序 df = df.sort_values('timestamp').reset_index(drop=True) # 标记状态变化的位置 df['status_change'] = df['boiler_status'].diff() # 提取运行开始时间:状态从0→1的时刻,或第一条数据就是开启状态的情况 start_mask = (df['status_change'] == 1.0) | ((df['boiler_status'] == 1.0) & (df.index == 0)) start_times = df[start_mask]['timestamp'] # 提取运行结束时间:状态从1→0的时刻,或最后一条数据还是开启状态的情况 end_mask = (df['status_change'] == -1.0) | ((df['boiler_status'] == 1.0) & (df.index == len(df)-1)) end_times = df[end_mask]['timestamp'] # 生成甘特图所需的数据集 gantt_df = pd.DataFrame({ '设备': ['锅炉'] * len(start_times), '开始时间': start_times.values, '结束时间': end_times.values })
2. Plotly绘制甘特图
用Plotly的timeline方法生成甘特图,调整布局让展示更清晰:
import plotly.express as px fig = px.timeline(gantt_df, x_start="开始时间", x_end="结束时间", y="设备") # 反转Y轴,让设备名称显示在顶部 fig.update_yaxes(autorange="reversed") # 调整图表标题和轴标签 fig.update_layout( title="锅炉运行时间线", xaxis_title="时间", yaxis_title="设备名称" ) fig.show()
关键说明
- 处理边界场景:如果数据开头就是锅炉开启状态,会把第一个时间戳作为运行开始;如果数据结尾还是开启状态,会把最后一个时间戳作为运行结束。
- 状态变化标记:用
diff()方法计算相邻行的状态差,快速定位从关闭到开启(+1.0)、开启到关闭(-1.0)的节点。
内容的提问来源于stack exchange,提问作者Juan Siécola
相关产品推荐
相关产品推荐

