当前位置: 首页 > 知识库问答 >
问题:

使用数字值绘制甘特图

孔俊友
2023-03-14

我想创建交互式甘特图(或序列图),用于显示多个处理器上的任务调度。

我找到了这个库,它产生了非常好的交互式甘特图。不幸的是,ploly-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()

共有1个答案

陆伟
2023-03-14

所以我试图让Ploly的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\u to\u datetime取一个整数,并将其转换为从1971-01-01开始的日期时间字符串,用于x=0,并且每增加x一天。此函数用于将甘特图中可能要使用的所有数值转换为日期字符串。在这里,我刚刚插入了从0到10的整数,以展示这实际上是可行的。

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

最后,如果你执行整个事情,你会得到一个交互式甘特图,如下所示:

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

 类似资料:
  • 带有高图的GANTT图表示例:http://jsfiddle.net/gh/get/jquery/1.7.2/highslide-software/highcharts.com/tree/master/samples/highcharts/studies/xrange-series/ 我试着用这样一个里程碑的例子。 我的代码目前看起来像这样: 编辑:我希望它看起来像什么样的模型示例: http:/

  • 我想画一些垂直线来跟踪任务,如下图中的红线所示。我相信可以使用甘特图绘制器绘制线条。 我想要的是在绘制任务期间存储直线endpoint的坐标,然后最终在绘图中绘制这些直线。 我想知道是否有一种方法可以让你在绘图上绘制任何东西,以及这是否是解决这个问题的正确方法。 以下是我的甘特图渲染器代码: 更新: 似乎LineAnnotics是实现这些行的最佳方式。Link1

  • 有人知道如何在甘特图中的特定位置移动/绘制虚线吗?例如,我有这样的图表: 链接到图像 很难看到任务1和任务2以及任务3在哪里。 如果可能的话,画水平线不是在1,2,3线,而是在整个系列之后,以明确视觉分隔符。 谢谢

  • 我不熟悉plotly,我有一些start=int和finish=int(以抽象时间单位)的任务。但x轴默认为日期格式。我想将x轴设置为数字格式(0,1,2…) 这是我的代码: df看起来像: 任何建议!

  • 问题内容: matplotlib如何用该数据绘制图形。问题在于可视化从第2列到第3列的距离。最后,它看起来应该像甘特图。 我需要为列1提供2种颜色。对于y轴,选择列0,对于x轴,请选择列2和3。对于每一行,应绘制一条线。第2列是开始时间,第3列是停止时间。 问题答案: 如果我对您的理解正确,则希望在第3列和第4列的x值之间绘制一条水平线,而y值等于在第0列中的水平线。要在给定的y值上绘制一条水平线

  • 甘特图用于比较类别之间的数据。此外,它还可用于识别每个过程所花费的时间。 它显示了一段时间内任务值的进展。它在一段时间内广泛用于项目管理和其他类型的变异研究。 除时间维度外,甘特图也采用维度和度量。 例如,使用Sample-Superstore数据源,可以按照每种类型的发运模式进行运输。对于创建,甘特图遵循程序如下: 第1步:转到工作表。 单击“标记(Marks)”窗格中的下拉按钮。 从给定列表中