Eu tenho um conjunto de dados na forma de um dataframe estruturado da seguinte forma
Trabalho | Tarefa | Máquina | Começar | Fim | cor |
---|---|---|---|---|---|
A | Faça X | 1 | 0 | 5 | azul |
A | Faça você | 2 | 6 | 14 | azul |
B | Faça Q | 3 | 0 | 8 | verde |
B | Faça Z | 3 | 9 | 12 | verde |
B | Faça X | 1 | 14 | 17 | verde |
C | Faça você | 1 | 6 | 9 | vermelho |
Quero plotá-los em uma linha do tempo interativa usando Plotly (por exemplo, px.timeline), semelhante à imagem incluída abaixo, também conhecida como gráfico de Gantt. Por máquina (eixo y), quero uma barra colorida representando uma tarefa atribuída a essa máquina, semelhante à sua duração. Para meus dados de exemplo, significa que para a máquina 1 existem três barras coloridas (0-5, 6-9, 14-17). As tarefas deverão ser coloridas de acordo com uma cor de trabalho definida, conforme incluída na coluna de cores. Idealmente, ao passar o mouse sobre a barra, ele mostra Job - Task, Start - end
.
Eu uso o seguinte;
Plotly 5.18.0
Python 3.9
Pandas 2.1.2
Existe uma maneira de fazer isso?
Brinquei com o Plotly, mas só consegui os trabalhos no eixo y ( https://plotly.com/python/gantt/ ). Usei https://plotly.com/python/figure-factories/ já que px.timeline não parece aceitar valores inteiros para horários de início e término.
Em
px.timeline
, as cores não podem ser especificadas, então podemos simplesmente usar um gráfico de barras horizontais. Para desenhar um gráfico de barras horizontais com uma cor especificada, especifique um gráfico de barras empilhadas em um processo de loop com o conteúdo extraído condicionalmente do quadro de dados por Job. A base é especificada porque é sempre necessário definir a posição inicial. A exibição de texto só pode ser selecionada dentro e fora, então a adicionamos ao centro do gráfico de barras usando anotações de stringUm gráfico de barras horizontais deve funcionar, onde você analisa cada parte de sua
df
pertença a uma máquina específica usandodf.groupby('Machine')
e, em seguida, traça umgo.Bar
traço correspondente a cada linha dentro desse grupo (usando todas as informações na linha para a cor, posicionamento e duração de cada barra).