【问题标题】:plotly borders getting overlapping gantt chart情节边界越来越重叠甘特图
【发布时间】:2020-05-08 15:45:28
【问题描述】:

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)

【问题讨论】:

    标签: python plotly plotly-python


    【解决方案1】:

    要为图表添加边框,请参阅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,None) 来区分新行。
    • (0,0) 开始新行开始
    • (0, last point) 完成该行

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

    解决方案 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()
    

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

    方案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])
    

    【讨论】:

    • 我需要水平条的边框,而不是整个图表
    • 好的,我现在明白了...fig.update_traces(mode='lines', line_color='yellow', selector=dict(fill='toself')) 让您非常接近。 for trace in fig.data: ... 是试图关闭边界吗?
    • 是的,但是当我们有 colors=colors, index_col='Resource', 时这不起作用
    • 修改了上面的答案。
    • so SolutionA 不会像我一样创建一个图形?也许你可以用更多关于预期输出的细节来更新你的问题,并清理代码部分(看起来相同的代码有两次)。
    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多