我有一个数据框形式的数据集,其结构如下
工作 | 任务 | 机器 | 开始 | 结尾 | 颜色 |
---|---|---|---|---|---|
A | 做 X | 1 | 0 | 5 | 蓝色的 |
A | 是吗 | 2 | 6 | 14 | 蓝色的 |
乙 | 做问 | 3 | 0 | 8 | 绿色的 |
乙 | 做 Z | 3 | 9 | 12 | 绿色的 |
乙 | 做 X | 1 | 14 | 17 | 绿色的 |
C | 是吗 | 1 | 6 | 9 | 红色的 |
我想使用 Plotly(例如 px.timeline)在交互式时间线上绘制这些内容,类似于下面的图片,也称为甘特图。对于每台机器(y 轴),我想要一个彩色条形图来表示分配给该机器的任务,类似于其持续时间。对于我的示例数据,这意味着对于机器 1,有三个彩色条形图(0-5、6-9、14-17)。任务应根据定义的作业颜色着色,如颜色列中所述。理想情况下,将鼠标悬停在条形图上时,它会显示Job - Task, Start - end
。
我使用以下内容;
Plotly 5.18.0
Python 3.9
Pandas 2.1.2
有没有办法做到这一点?
我尝试了 Plotly,但只设法在 y 轴上获取作业(https://plotly.com/python/gantt/)。我使用了https://plotly.com/python/figure-factories/,因为 px.timeline 似乎不接受开始和结束时间的整数值。
在 中
px.timeline
,无法指定颜色,因此我们只需使用水平条形图即可。要绘制具有指定颜色的水平条形图,请在循环过程中指定堆叠条形图,内容由 Job 有条件地从数据框中提取。指定基数是因为始终需要设置起始位置。文本显示只能选择内部和外部,因此我们使用字符串注释将其添加到条形图的中心水平条形图应该可以工作,您可以
df
使用来分析属于特定机器的每个部分df.groupby('Machine')
,然后绘制go.Bar
与该组内每一行相对应的轨迹(使用该行中的所有信息来确定每个条形的颜色、位置和持续时间)。