绘制重叠甘特图

2024-04-25 19:52:43 发布

您现在位置:Python中文网/ 问答频道 /正文

please see the below image我正在尝试创建甘特图的边界,但遇到以下问题。请看下面我的代码, 我在显示的图表中遇到错误,我不确定如何继续

我正在尝试创建甘特图的边界,但遇到以下问题。请看下面我的代码, 我在显示的图表中遇到错误,我不确定如何继续

我正在尝试创建甘特图的边界,但遇到以下问题。请看下面我的代码, 我在显示的图表中遇到错误,我不确定如何继续

import plotly
import plotly.figure_factory as ff

df = [
dict(Task=‘Evening Sleep’, Start=‘2009-01-01’, Finish=‘2009-02-28’, Resource=‘Sleep’, Description = ‘my hover1’ ),
dict(Task=‘Evening Sleep’, Start=‘2009-03-05’, Finish=‘2009-04-15’, Resource=‘Sleep’, Description = ‘my hover1’),
dict(Task=‘Evening Sleep’, Start=‘2009-04-05’, Finish=‘2009-05-15’, Resource=‘Sleep’, Description = ‘my hover1’),
dict(Task=‘Evening Sleep’, Start=‘2009-05-05’, Finish=‘2009-06-15’, Resource=‘Sleep’, Description = ‘my hover1’),
dict(Task=‘Morning Sleep’, Start=‘2009-06-05’, Finish=‘2009-07-15’, Resource=‘Cardio’, Description = ‘my hover1’),
dict(Task=‘Morning Sleep’, Start=‘2009-07-05’, Finish=‘2009-08-15’, Resource=‘Cardio’, Description = ‘my hover1’),
dict(Task=‘Morning Sleep’, Start=‘2009-08-05’, Finish=‘2009-09-15’, Resource=‘Cardio’, Description = ‘my hover1’),
dict(Task=‘Morning Sleep’, Start=‘2009-09-05’, Finish=‘2009-10-15’, Resource=‘Cardio’, Description = ‘my hover1’)

]

colors = dict(Cardio = ‘rgb(46, 137, 205)’,
Food = ‘rgb(114, 44, 121)’,
Sleep = ‘rgb(198, 47, 105)’)

fig = ff.create_gantt(df, colors=colors, index_col=‘Resource’, title=‘Daily Schedule’,show_colorbar=True, showgrid_x=True, showgrid_y=True, group_tasks=True)

#fig = ff.create_gantt(df, group_tasks=True)
fig.update_traces(mode=‘lines’, line_color=‘yellow’, selector=dict(fill=‘toself’))
for trace in fig.data:
trace.x += (trace.x[0],)
trace.y += (trace.y[0],)

fig.show()

fig = ff.create_gantt(df, colors=colors, index_col=‘Resource’, title=‘Daily Schedule’,show_colorbar=True, showgrid_x=True, showgrid_y=True, group_tasks=True)

#fig = ff.create_gantt(df, group_tasks=True)enter code here
import plotly
import plotly.figure_factory as ff

df = [
dict(Task=‘Evening Sleep’, Start=‘2009-01-01’, Finish=‘2009-02-28’, Resource=‘Sleep’, Description = ‘my hover1’ ),
dict(Task=‘Evening Sleep’, Start=‘2009-03-05’, Finish=‘2009-04-15’, Resource=‘Sleep’, Description = ‘my hover1’),
dict(Task=‘Evening Sleep’, Start=‘2009-04-05’, Finish=‘2009-05-15’, Resource=‘Sleep’, Description = ‘my hover1’),
dict(Task=‘Evening Sleep’, Start=‘2009-05-05’, Finish=‘2009-06-15’, Resource=‘Sleep’, Description = ‘my hover1’),
dict(Task=‘Morning Sleep’, Start=‘2009-06-05’, Finish=‘2009-07-15’, Resource=‘Cardio’, Description = ‘my hover1’),
dict(Task=‘Morning Sleep’, Start=‘2009-07-05’, Finish=‘2009-08-15’, Resource=‘Cardio’, Description = ‘my hover1’),
dict(Task=‘Morning Sleep’, Start=‘2009-08-05’, Finish=‘2009-09-15’, Resource=‘Cardio’, Description = ‘my hover1’),
dict(Task=‘Morning Sleep’, Start=‘2009-09-05’, Finish=‘2009-10-15’, Resource=‘Cardio’, Description = ‘my hover1’)

]

colors = dict(Cardio = ‘rgb(46, 137, 205)’,
Food = ‘rgb(114, 44, 121)’,
Sleep = ‘rgb(198, 47, 105)’)

fig = ff.create_gantt(df, colors=colors, index_col=‘Resource’, title=‘Daily Schedule’,show_colorbar=True, showgrid_x=True, showgrid_y=True, group_tasks=True)

#fig = ff.create_gantt(df, group_tasks=True)
fig.update_traces(mode=‘lines’, line_color=‘yellow’, selector=dict(fill=‘toself’))
for trace in fig.data:
trace.x += (trace.x[0],)
trace.y += (trace.y[0],)

fig.show()

fig = ff.create_gantt(df, colors=colors, index_col=‘Resource’, title=‘Daily Schedule’,show_colorbar=True, showgrid_x=True, showgrid_y=True, group_tasks=True)

#fig = ff.create_gantt(df, group_tasks=True)

Tags: truedftaskmyfigsleepdescriptionstart
1条回答
网友
1楼 · 发布于 2024-04-25 19:52:43

要在图表中添加边框,请参见here,但总而言之,您需要:

fig.update_xaxes(showline=True, linewidth=1, linecolor='black', mirror=True)
fig.update_yaxes(showline=True, linewidth=1, linecolor='black', mirror=True)

…但这不是你真正需要的

要获得每个条的完整边框,您只需要以下内容:

fig.update_traces(marker_line_color='yellow', marker_line_width=1, opacity=0.6)

…但此方法仅出于某些原因更新不透明度(但适用于其他类型的条形图)

使用您的方法,您需要再添加三个点以闭合线:

  • (0,无)以区分新行
  • (0,0)在开始时启动新线
  • (0,最后一点)以完成该行

我在下面的代码中又添加了几个注释:

解决方案A

import plotly
import plotly.figure_factory as ff

df = [
dict(Task='Evening Sleep', Start='2009-01-01', Finish='2009-02-28', Resource='Sleep', Description = 'my hover1' ),
dict(Task='Evening Sleep', Start='2009-03-05', Finish='2009-04-15', Resource='Sleep', Description = 'my hover1'),
dict(Task='Evening Sleep', Start='2009-04-05', Finish='2009-05-15', Resource='Sleep', Description = 'my hover1'),
dict(Task='Evening Sleep', Start='2009-05-05', Finish='2009-06-15', Resource='Sleep', Description = 'my hover1'),
dict(Task='Morning Sleep', Start='2009-06-05', Finish='2009-07-15', Resource='Cardio', Description = 'my hover1'),
dict(Task='Morning Sleep', Start='2009-07-05', Finish='2009-08-15', Resource='Cardio', Description = 'my hover1'),
dict(Task='Morning Sleep', Start='2009-08-05', Finish='2009-09-15', Resource='Cardio', Description = 'my hover1'),
dict(Task='Morning Sleep', Start='2009-09-05', Finish='2009-10-15', Resource='Cardio', Description = 'my hover1')
]

colors = dict(Cardio = 'rgb(46, 137, 205)', Food = 'rgb(114, 44, 121)',
              Sleep = 'rgb(198, 47, 105)')

fig = ff.create_gantt(df, colors=colors, index_col='Resource', 
                      title='Daily Schedule', show_colorbar=True, 
                      showgrid_x=True, showgrid_y=True, group_tasks=True)

fig.update_traces(mode='lines', line_color='yellow', selector=dict(fill='toself'))
for trace in fig.data:
    # WE NEED TO ADD THREE POINTS HERE:
    #print(trace.x)
    trace.x += (trace.x[0],)
    trace.x += (trace.x[0],)
    trace.x += (trace.x[0],)
    #print(trace.x)
    #print(trace.y)
    trace.y += (trace.y[-5],) #this adds a None to distinguish the new line (from the previous break)
    trace.y += (trace.y[0],)  #this starts us off with the first point
    trace.y += (trace.y[-3],) # this finishes us with the last point (now 3 positions back)
    #print(trace.y)
fig.show()

此外,如果取消对这些print语句的注释,您将看到前后的结果点

解决方案A修改

您还可以像这样一次添加所有三个点(这有点干净):

for trace in fig.data:
    trace.x += (trace.x[0], trace.x[0], trace.x[0])
    trace.y += (trace.y[-5], trace.y[0], trace.y[-1])

enter image description here

相关问题 更多 >

    热门问题