添加颜色时,绘图时间轴条消失
Bars of plotly timeline disappear when adding color
我正在尝试使用 plotly express timeline 可视化一系列视频中的不同阶段。我想为每个视频创建一个条形图,并对每个视频的阶段进行不同的着色。即同相位,同颜色。
这是数据框的一些行:
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.timeline
fig_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
当我尝试使用字典和 'Resource' 列添加多种颜色时,我最终得到了一个彩色图例,但根本没有条形。
词典:
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
所以我为每个视频设置了一个栏 ('Task')。每个条包含具有相应范围 ('Start' & 'Finish') 的阶段 ('Resource'),但我在添加颜色以使其更具可读性时失败了。
是否有解决这个问题的简单方法,我只是想念这个问题,还是更复杂?
非常感谢您的帮助!
这个答案最初提供了解决方案,对我来说非常有用
只需更改此行:
fig_gantt.data[0].x = df.delta.tolist()
喜欢下面的代码(可能需要一些调整,因为您使用的是自定义颜色编码,但希望您能弄明白)
for d in fig_gantt.data:
filt = df['Resource'] == d.name
d.x = df[filt]['delta'].tolist()
我正在尝试使用 plotly express timeline 可视化一系列视频中的不同阶段。我想为每个视频创建一个条形图,并对每个视频的阶段进行不同的着色。即同相位,同颜色。
这是数据框的一些行:
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
当我尝试使用字典和 'Resource' 列添加多种颜色时,我最终得到了一个彩色图例,但根本没有条形。
词典:
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
所以我为每个视频设置了一个栏 ('Task')。每个条包含具有相应范围 ('Start' & 'Finish') 的阶段 ('Resource'),但我在添加颜色以使其更具可读性时失败了。 是否有解决这个问题的简单方法,我只是想念这个问题,还是更复杂?
非常感谢您的帮助!
这个答案最初提供了解决方案,对我来说非常有用
只需更改此行:
fig_gantt.data[0].x = df.delta.tolist()
喜欢下面的代码(可能需要一些调整,因为您使用的是自定义颜色编码,但希望您能弄明白)
for d in fig_gantt.data:
filt = df['Resource'] == d.name
d.x = df[filt]['delta'].tolist()