我想创建交互式甘特图(或序列图),用于显示多个处理器上的任务调度。
我找到了这个库,它生成了非常好的交互式甘特图。不幸的是,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()发布于 2019-08-29 02:24:39
所以我尝试让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接受一个整数并将其转换为从x=0的1971-01-01开始的日期时间字符串,并且每递增一次x递增一天。此函数用于将您可能要在甘特图中使用的所有数值转换为日期字符串。在这里,我只是将0中的整数插入到10中,以展示这实际上是有效的。
然后,对于刻度标签,使用最低(0)和最大(10)值来创建均匀分布的刻度标签。然后,使用列表理解将这些整数转换为日期字符串。
最后,如果您执行整个代码,您将得到一个交互式甘特图,如下所示:

我相信这种方法肯定可以改进,以获得更好的工作流程,但您可以将其作为一个起点。
https://stackoverflow.com/questions/57686684
复制相似问题