使用create_gantt()生成甘特图时如何展示任务依赖关系
Plotly甘特图添加任务依赖箭头的解决方案
plotly.figure_factory.create_gantt()本身没有内置任务依赖线的渲染能力,你可以通过手动添加注释箭头的方式实现需求,完整实现代码如下:
import plotly.figure_factory as ff from datetime import datetime # 原始任务数据 df = [dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28'), dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15'), dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30')] # 生成甘特图 fig = ff.create_gantt(df) # 构建任务坐标映射:key为任务名,value存储任务的y轴位置、结束时间、开始时间 task_info = {} # create_gantt默认y轴顺序:第一个任务在最上方,3个任务的话Job A对应y=2,Job B对应y=1,Job C对应y=0 for idx, task in enumerate(df): y_val = len(df) - 1 - idx # 转换为plotly内部使用的毫秒级时间戳 start_ts = datetime.strptime(task['Start'], '%Y-%m-%d').timestamp() * 1000 finish_ts = datetime.strptime(task['Finish'], '%Y-%m-%d').timestamp() * 1000 task_info[task['Task']] = {'y': y_val, 'start': start_ts, 'finish': finish_ts} # 添加Job A到Job B的依赖箭头 fig.add_annotation( # 箭头起点:Job A的结束时间位置 + Job A的y轴坐标 ax=task_info['Job A']['finish'], ay=task_info['Job A']['y'], # 箭头终点:Job B的开始时间位置 + Job B的y轴坐标 x=task_info['Job B']['start'], y=task_info['Job B']['y'], xref='x', yref='y', axref='x', ayref='y', showarrow=True, arrowhead=3, # 箭头样式等级 arrowsize=1.5, # 箭头大小 arrowwidth=2, # 箭头线宽 arrowcolor='#FF4B4B' # 箭头颜色 ) fig.show()
补充说明
- 若需添加多组依赖,仅需遍历依赖关系列表,重复调用
add_annotation方法即可 - 可根据实际需求调整箭头相关参数,匹配图表整体风格
内容的提问来源于stack exchange,提问作者Frank Sheng
相关产品推荐
相关产品推荐

