【发布时间】:2021-07-23 14:01:15
【问题描述】:
我正在尝试使用 plotly express 时间线来可视化一系列视频中的不同阶段。我想为每个视频创建一个栏,并对每个视频的阶段进行不同的着色。这意味着相同的相位,相同的颜色。
以下是数据框的一些行:
Task Start Finish Resource delta
vid_idx
Video_002_007_1 Video_002_007_1 0 91 0 91
Video_002_007_1 Video_002_007_1 92 371 1 279
Video_002_007_1 Video_002_007_1 372 630 12 258
Video_002_007_1 Video_002_007_1 631 12352 1 11721
Video_002_007_1 Video_002_007_1 12353 60336 2 47983
Video_002_007_1 Video_002_007_1 60337 67641 3a 7304
Video_002_007_1 Video_002_007_1 67642 69134 2 1492
Video_002_007_1 Video_002_007_1 69135 69396 3b 261
Video_002_007_1 Video_002_007_1 69397 73963 3a 4566
Video_002_007_1 Video_002_007_1 73964 76800 3b 2836
Video_002_007_1 Video_002_007_1 76801 95566 4 18765
Video_002_007_1 Video_002_007_1 95567 97920 5 2353
Video_002_007_1 Video_002_007_1 97921 98119 12 198
Video_002_007_1 Video_002_007_1 98120 99171 5 1051
Video_002_007_1 Video_002_007_1 99172 99260 12 88
Video_002_007_1 Video_002_007_1 99261 102295 5 3034
Video_002_007_1 Video_002_007_1 102296 102378 12 82
Video_002_007_1 Video_002_007_1 102379 103045 5 666
Video_002_007_1 Video_002_007_1 103046 111433 6 8387
Video_002_007_1 Video_002_007_1 111434 111469 8 35
“delta”列是“Finish”-“Start”的结果。除了以下代码行之外,还需要将 x 轴从日期切换到逐帧。 (至少据我所知)
fig_gantt.layout.xaxis.type='linear'
fig_gantt.data[0].x = df.delta.tolist()
fig_gantt.update_layout(xaxis=dict(tickmode='linear',tick0=0,dtick=50000))
我正在使用
创建 px.timelinefig_gantt = px.timeline(df,
x_start='Start',
x_end='Finish',
y='Task',
width=1000,
height=500)
fig_gantt.update_yaxes(autorange="reversed")
fig_gantt.layout.xaxis.type='linear'
fig_gantt.data[0].x = df.delta.tolist()
fig_gantt.update_layout(xaxis=dict(tickmode='linear',tick0=0,dtick=50000))
fig_gantt.show()
这会产生以下甘特图:Gantt chart single color
当我尝试使用字典和“资源”列添加多种颜色时,我最终得到了一个彩色图例,但根本没有条形图。
字典:
colors = {'0':'rgb(0,0,255)',
'1':'rgb(0,255,0)',
'2':'rgb(255,0,0)',
'2b':'rgb(255,64,127)',
'3a':'rgb(0,255,255)',
'3b':'rgb(255,255,0)',
'4':'rgb(127,127,127)',
'5':'rgb(0,0,127)',
'6':'rgb(0,127,0)',
'7':'rgb(127,0,0)',
'8':'rgb(0,127,127)',
'10a':'rgb(127,127,0)',
'10b':'rgb(64,127,255)',
'10c':'rgb(255,127,64)',
'12':'rgb(127,64,255)'}
我尝试将颜色添加到图表中:
for i in lst:
fig_gantt = ff.create_gantt(df_timeline.loc[list_vids[i:i+1]],
colors=colors,
index_col='Resource',
group_tasks=True,
title='Phase lengths',
show_colorbar=True,
showgrid_x=True,
height=200)
fig_gantt.update_yaxes(autorange="reversed")
fig_gantt.update_xaxes(type='linear')
fig_gantt.update_layout(xaxis=dict(tickmode='linear',tick0=0,dtick=4000))
fig_gantt.show()
gantt with colorful legend but without bars
所以我为每个视频设置了一个栏(“任务”)。每个栏都包含具有相应范围(“开始”和“完成”)的阶段(“资源”),但是我在添加颜色以使其更具可读性时失败了。 有没有我刚刚遗漏的这个问题的简单解决方案,还是更复杂?
非常感谢您的帮助!
【问题讨论】:
标签: python plotly gantt-chart