在 plotly 中使用数值来创建甘特图
Posted
技术标签:
【中文标题】在 plotly 中使用数值来创建甘特图【英文标题】:Using numerical values in plotly for creating Gantt-Charts 【发布时间】:2020-01-01 08:14:56 【问题描述】:我想创建交互式甘特图(或序列图)以显示多个处理器上的任务调度。
我找到了这个库,它产生了非常好的交互式甘特图。不幸的是,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 仅适用于日期,您是否尝试过?我现在无法测试它,但我想它也可以使用数值,因为日期通常也会转换为数字进行绘图。 @Axel 是的,我尝试过使用整数和浮点数。 Plotly 似乎将这些值转换为日期,因为 0 等于 1970 之类的东西 @RoQuOTriX 好吧,可惜了。但也许你最好的选择是改写你的问题如何让 Plotly 使用数值。因为据我所知,Plotly 是最先进的交互式绘图工具。还有Pygal,但我在他们的网站上找不到任何关于甘特图的信息。 您的编辑改进了这个问题,我使它足够具体以成为主题,感谢您加入我的 cmets。我撤回了我的近距离投票并更新了您的标签,希望您找到解决方案。 【参考方案1】:所以我试图让 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
每增加一天就增加一天。此函数用于将您可能希望在甘特图中使用的所有数值转换为日期字符串。这里我只是插入了从0
到10
的整数来展示这确实有效。
那么对于刻度标签,最低 (0
) 和最大 (10
) 值用于创建均匀分布的刻度标签。然后这些整数也会使用列表推导转换为日期字符串。
最后,如果你执行整个过程,你会得到一个交互式甘特图,如下所示:
我相信这种方法绝对可以改进以获得更好的工作流程,但您可以将其作为起点。
【讨论】:
以上是关于在 plotly 中使用数值来创建甘特图的主要内容,如果未能解决你的问题,请参考以下文章
带有整数 xaxis 的甘特图的 Plotly Express 时间线?