Plotly:如何在甘特图上标记条形图?

5

有没有办法在Plotly Gantt图中创建带有任务标签的条形图和y轴上的资源标签?

文档中的plotly.figure_factory.create_gantt没有这样的示例。下面是一个理想图表的抽象示例:

enter image description here

1个回答

6

你可以在 fig['layout']['annotations'] 中添加作为字典列表结构的注释,基于一个类似于链接里的第一个示例的设置。

图表:

enter image description here

代码:

这个图表的结构与上述来源类似,但我将其设置为使用离线Jupyter Notebook中的iplot()函数运行。

# imports
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
from IPython.core.display import display, HTML
import plotly.figure_factory as ff
import plotly.graph_objs as go

# setup
display(HTML("<style>.container { width:50% !important; } .widget-select > select {background-color: gainsboro;}</style>"))
init_notebook_mode(connected=True)

#%qtconsole --style vim

# dates
StartA = '2009-01-01'
StartB = '2009-03-05'
StartC = '2009-02-20'

FinishA='2009-02-28'
FinishB='2009-04-15'
FinishC='2009-05-30'

LabelDateA='2009-01-25'
LabelDateB='2009-03-20'
LabelDateC='2009-04-01'

# sample data
df = [dict(Task="Task A", Start=StartA, Finish=FinishA),
      dict(Task="Task B", Start=StartB, Finish=FinishB),
      dict(Task="Task C", Start=StartC, Finish=FinishC)]

# figure
fig = ff.create_gantt(df)

# add annotations
annots =  [dict(x=LabelDateA,y=0,text="Task label A", showarrow=False, font=dict(color='white')),
           dict(x=LabelDateB,y=1,text="Task label B", showarrow=False, font=dict(color='White')),
           dict(x=LabelDateC,y=2,text="Task label C", showarrow=False, font=dict(color='White'))]

# plot figure
fig['layout']['annotations'] = annots
iplot(fig)

可能的改进:

如您所见,我已经在标签位置上硬编码了日期。您可以轻松地计算开始日期和结束日期之间的中间日期。但为什么不直接使用align=center来调整标签在(x=LabelDateC,y=2,align="center",text="Task label C", showarrow=False, font=dict(color='White'))中的位置呢?这将无法实现,因为标签似乎附加在日期本身而不是柱状图的结构或大小上。


1
谢谢你的回答,非常有帮助。现在唯一的小问题是我想将这些注释与 group_tasks = True 选项结合起来,该选项会反转“任务”类别沿 y 轴的排序:例如,当 group_Tasks = False 时,“Job-1”类别位于底部,“Job-4”类别位于顶部。而使用 group_Tasks = True 时情况则相反:一个“连接”的“Job-1”位于顶部。你知道是否有任何方法可以解决这个问题吗? - Dima

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接