在 plotly 中使用数值创建甘特图

Using numerical values in plotly for creating Gantt-Charts

我想创建交互式甘特图(或序列图)来显示多个处理器上的任务安排。

我找到了 plotly 库,它生成了非常好的交互式甘特图。不幸的是,plotly-Gantt 只适用于日期而不是数值,就像我对时间表的运行时值一样。

是否可以用数值绘制甘特图?

代码示例:(我想使用这样的东西)

import plotly.figure_factory as ff

df = [dict(Task="Job A on Core 0", Start=0, Finish=10),
      dict(Task="Job B on Core 1", Start=2, Finish=8),
      dict(Task="Job C on Core 0", Start=11, Finish=12)]

fig = ff.create_gantt(df)
fig.show()

所以我尝试让 Plotly 的 figure_factory 函数 create_gantt 处理数值。我想出的唯一一件事是一个相当肮脏的解决方法,看起来像这样:

import plotly.figure_factory as ff
from datetime import datetime
import numpy as np

def convert_to_datetime(x):
  return datetime.fromtimestamp(31536000+x*24*3600).strftime("%Y-%d-%m")

df = [dict(Task="Job A", Start=convert_to_datetime(0), Finish=convert_to_datetime(4)),
      dict(Task="Job B", Start=convert_to_datetime(3), Finish=convert_to_datetime(6)),
      dict(Task="Job C", Start=convert_to_datetime(6), Finish=convert_to_datetime(10))]

num_tick_labels = np.linspace(start = 0, stop = 10, num = 11, dtype = int)
date_ticks = [convert_to_datetime(x) for x in num_tick_labels]

fig = ff.create_gantt(df)
fig.layout.xaxis.update({
        'tickvals' : date_ticks,
        'ticktext' : num_tick_labels
        })
fig.write_html('first_figure.html', auto_open=True)

函数 convert_to_datetime 接受一个整数并将其转换为日期时间字符串,从 1971-01-01 开始 x=0,并且每增加 x 一天就增加一天。此函数用于将您可能想要在甘特图中使用的所有数值转换为日期字符串。在这里,我只是插入了从 010 的整数,以证明这确实有效。

然后对于刻度标签,最低 (0) 和最大 (10) 值用于创建均匀分布的刻度标签。然后使用列表理解将这些整数转换为日期字符串。

最后,如果执行全部操作,您将获得如下所示的交互式甘特图:

我相信这种方法肯定可以改进以获得更好的工作流程,但您可以将其作为起点。