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

如何在Plotly Express Timeline甘特图中分离同名任务?

解决Plotly Express Timeline甘特图中同名任务分开展示的问题

默认情况下,px.timeline会将y参数中取值相同的任务合并到同一行显示。要让两个"Job A"独立分开展示,核心是让每个任务在y轴上拥有唯一的标识,以下是两种可行方案:

方案一:生成唯一任务ID并自定义y轴标签

该方案保持y轴显示原任务名称,同时让同名任务分开展示:

import plotly.express as px
import pandas as pd

df = pd.DataFrame([
    dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28', Worker='Alex'),
    dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', Worker='John'),
    dict(Task="Job A", Start='2009-02-20', Finish='2009-05-30', Worker='Marc')
])

# 生成唯一任务标识:原任务名 + 组内序号
df['Unique_Task'] = df['Task'] + '_' + df.groupby('Task').cumcount().astype(str)

# 使用唯一标识作为y轴参数
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Unique_Task", color="Worker")

# 自定义y轴刻度,显示原任务名称
fig.update_yaxes(
    ticktext=df['Task'],
    tickvals=df['Unique_Task'],
    autorange="reversed"
)

fig.show()

方案二:结合任务与Worker生成唯一标识(更直观)

如果需要直接区分每个任务的执行者,可以将任务名和Worker组合作为y轴标识:

import plotly.express as px
import pandas as pd

df = pd.DataFrame([
    dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28', Worker='Alex'),
    dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', Worker='John'),
    dict(Task="Job A", Start='2009-02-20', Finish='2009-05-30', Worker='Marc')
])

# 组合任务名与Worker生成唯一标识
df['Task_Worker'] = df['Task'] + ' (' + df['Worker'] + ')'

# 使用组合标识绘制甘特图
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task_Worker", color="Worker")
fig.update_yaxes(autorange="reversed")
fig.show()

两种方案的区别:方案一保持y轴简洁,仅显示原任务名;方案二通过添加Worker信息,让每个任务的归属更清晰,适合需要区分执行者的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:55:12