绘制甘特图

时间:2019-05-09 19:05:16

标签: python plotly visualization gantt-chart

有什么方法可以在Plotly Gantt图表中创建,其中任务标签位于条形图上,资源标签位于y轴上?

plotly.figure_factory.create_gantt的{​​{3}}中没有这样的示例。理想图表的抽象示例如下:

documentation

1 个答案:

答案 0 :(得分:1)

您可以根据your link中第一个示例的设置,在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)

可能的改进:

如您所见,我已经对标签放置的日期进行了硬编码。您可以在开始日期和结束日期之间轻松calculate the middle date。但是,为什么不简单地使用align=center中的(x=LabelDateC,y=2,align="center",text="Task label C", showarrow=False, font=dict(color='White'))来调整标签呢?这行不通,因为标签似乎贴在日期本身上,而不是标签的结构或大小上。