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

如何基于开关状态与时间戳用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 01:27:06