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

如何生成Y轴为Resource的10台机器100任务Scheduling Gantt Chart

解决方案:生成机器调度式甘特图(Y轴为Resource)

核心问题解决思路

ff.create_gantt 默认会将同一Resource下的任务堆叠为阶梯状,且Y轴逻辑不符合调度场景需求。改用Plotly原生的Bar图可以完全自定义任务位置与Y轴映射,避免自动堆叠的问题,同时适配多机器场景。

实现步骤与代码示例

假设你的数据框df包含以下字段:Task(任务名)、Resource(机器标识)、Start(任务开始时间)、End(任务结束时间)。

import plotly.graph_objects as go
import pandas as pd

# 1. 为每个机器分配固定Y轴位置,确保同一机器的任务在同一Y轴高度
resource_unique = df['Resource'].unique()
y_axis_mapping = {res: idx for idx, res in enumerate(resource_unique)}
df['y_position'] = df['Resource'].map(y_axis_mapping)

# 2. 构建调度甘特图
fig = go.Figure()

# 逐个添加任务条形
for _, task in df.iterrows():
    fig.add_trace(go.Bar(
        x=[task['End'] - task['Start']],  # 任务持续时长
        y=[task['y_position']],
        base=task['Start'],  # 任务开始时间
        width=0.4,  # 条形宽度,适配多任务显示
        marker=dict(color=task.get('Color', '#1f77b4'))  # 支持自定义任务颜色
    ))

# 3. 调整布局,设置Y轴为机器标识
fig.update_layout(
    xaxis_title="时间",
    yaxis_title="机器(Resource)",
    yaxis=dict(
        tickmode="array",
        tickvals=list(y_axis_mapping.values()),
        ticktext=list(y_axis_mapping.keys()),
        autorange="reversed"  # 可选:让第一台机器显示在图表顶部
    ),
    barmode="overlay",  # 关键:同一机器的任务按时间重叠显示,而非堆叠
    autosize=False,
    width=800,
    height=400,  # 可根据机器数量调整,10台机器设400足够,更多机器可适当调高
    showlegend=False  # 任务数量过多时建议关闭图例
)

fig.show()

方案优势

  • 完全规避ff.create_gantt的阶梯状堆叠问题,同一机器的任务按时间轴正常排列
  • Y轴直接绑定机器标识,符合调度甘特图的展示逻辑
  • 相比Matplotlib方案,可通过调整height参数灵活适配机器数量,不会出现图表过度拉伸的情况,同时支持交互缩放查看细节

内容的提问来源于stack exchange,提问作者user21559

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:52:40