如何在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
相关产品推荐
相关产品推荐

