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

高图甘特图避免任务重叠

唐经国
2023-03-14

我回顾了这个问题的答案,其中提出了一些后续问题,涉及将解决方案泛化以支持每个类别的可变行数,现在我已经准备好了代码,可以将各种任务拆分为所需的行。

我已经使用了原来的小提琴并对其进行了修改,看到这里可以更好地理解这个概念。

    var today = new Date(),
  day = 1000 * 60 * 60 * 24;

// Set to 00:00:00:000 today
today.setUTCHours(0);
today.setUTCMinutes(0);
today.setUTCSeconds(0);
today.setUTCMilliseconds(0);
today = today.getTime();


// THE CHART
Highcharts.ganttChart('container', {
    chart: {
    events: {
        load: function() {
        var chart = this,
        series = chart.series[0];

        series.points.forEach(function(point) {
          point.graphic.translate(0, -50);
        });

        series = chart.series[1];

        series.points.forEach(function(point) {
          point.graphic.translate(0, -50);
       });

        series = chart.series[2];

        series.points.forEach(function(point) {
          point.graphic.translate(0, -50);
       });
}
    }
  },
  title: {
    text: 'Grouping tasks vertically'
  },
  yAxis: {
    categories: ['Resource 1', 'Resource 2', 'Resource 3'],
    breaks: [{
        breakSize: 1,
      from: 0,
      to: 0
    },{
        breakSize: 1,
      from: 1,
      to: 1
    },{
        breakSize: 1,
      from: 2,
      to: 2
    }]
  },
  plotOptions: {
    bar: {
      dataLabels: {
        enabled: true
      }
    }
  },
  series: [{
    name: 'Resource 1',
    data: [{
      name: 'Task A',
      y: 0,
      start: today - (2 * day),
      end: today + (6 * day)
    }, {
      name: 'Task B',
      y: 0.5,
      start: today - (1 * day),
      end: today + (6 * day),
      color: 'rgba(140, 140, 140, 0.7)'
    }, {
      name: 'Task C',
      y: 0.99,
      start: today + (1 * day),
      end: today + (17 * day),
      color: 'rgba(80, 180, 180, 0.7)'
    }]
  }, {
    name: 'Resource 2',
    data: [{
      name: 'Task D',
      y: 1,
      start: today - (1 * day),
      end: today + (6 * day)
    }, {
      name: 'Task E',
      y: 1.6,
      start: today + (7 * day),
      end: today + (9 * day),
      color: 'rgba(230, 180, 180, 0.7)'
    }, {
      name: 'Task F',
      y: 1,
      start: today + (11 * day),
      end: today + (12 * day)
    }, {
      name: 'Task G',
      y: 1,
      start: today + (14 * day),
      end: today + (16 * day)
    }]
  }, {
    name: 'Resource 3',
    data: [{
      name: 'Task H',
      y: 2,
      start: today - (1.5 * day),
      end: today + (4 * day)
    }, {
      name: 'Task I',
      y: 2,
      start: today + (6 * day),
      end: today + (9 * day)
    }, {
      name: 'Task J',
      y: 2,
      start: today + (10 * day),
      end: today + (14 * day)
    }, {
      name: 'Task K',
      y: 2.5,
      start: today + (15 * day),
      end: today + (17 * day),
      color: 'rgba(230, 180, 180, 0.7)'
    }]
  }]
});

我可以看到我们有一个必须一起工作的数字。我们首先似乎需要为每个将有多行的类别中断,我们需要将“y”属性设置为类别偏移量的十进制部分,并且我们需要在类别系列上应用翻译。

目前尚不清楚的是,特征大小、平移偏移和“y”的值是如何得出的。

接下来,我们使用每个类别的序列,而我们可以用单个序列生成图表,如树状网格,那么我们需要在这里将数据分解为单个序列吗?我们为用户提供了控制系列以与图例控制相匹配的能力,因此这可能是一个挑战。

我注意到你添加了一种颜色,当我不经常看到我的范围时,为什么有必要?

最后,你会注意到,在我的小提琴中,出现了一个名为“3”的额外类别。看了一下GantChart方法中的json,在基本转换之后,我看不出这是从哪里来的?

共有1个答案

燕英逸
2023-03-14

请注意,这只是一个解决方法,这不是实现的功能,在某些情况下无法工作,如示例中的工具提示中所示-它没有正确锚定(因为点已翻译)。

目前尚不清楚的是,特征大小、平移偏移和“y”的值是如何得出的。

对我来说,这种行为似乎出乎意料。留档说:

一个数字,指示在中断的开始和结束之间应该保留多少空间。中断大小以轴单位给出,因此,例如在日期时间轴上,3600000的中断大小表示相当于一小时。

应用程序编程接口:https://api.highcharts.com/highcharts/yAxis.breaks

没有关于使y轴行更高的信息,但似乎将breSize设置为1会使yAxis行高翻倍。

接下来,我们使用每个类别的序列,而我们可以用单个序列生成图表,如树状网格,那么我们需要在这里将数据分解为单个序列吗?我们为用户提供了控制系列以与图例控制相匹配的能力,因此这可能是一个挑战。

在这里,我不能100%确定您的想法。我假设您想创建像您在这里询问的那样的东西:HighCharts gantt treegrid折叠细节,但实现此功能需要对核心代码进行一些更改。

我注意到你添加了一种颜色,当我不经常看到我的范围时,为什么有必要?

我发现甘特图中的点从指定给它们的yAxis值继承颜色。

例如:将第一个点指定给yAxis中的0值,这使得该点的类设置为highcharts point highcharts-color-0,接下来在渲染点时,函数检查指定的类,并从该点上的默认highcharts颜色数组填充该颜色。所以,如果点的y设置为0.5,它将不起作用。

颜色数组的API:https://api.highcharts.com/highcharts/colors

最后,你会注意到,在我的小提琴中,出现了一个名为“3”的额外类别。看了一下GantChart方法中的json,在基本转换之后,我看不出这是从哪里来的?

出现这个“3”是因为您只定义了3个类别,同时您将最后一点的y值设置为2.5,这高于分配类别的范围。

总而言之,这个特性还没有实现,您尝试做的远不止常规API选项提供的功能。

 类似资料:
  • 在使用树状网格和子任务实现HC甘特图时,我注意到在示例中,折叠带有子项的项目将显示子项的详细信息,但并不总是这样。 查看标准项目管理示例(jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/gantt/demo/project-management),如果我们折叠“新办公室”节点,它将显示下面的子节点

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

  • 主要内容:什么是JFreeChart 甘特图,JFreeChart 甘特图的示例什么是JFreeChart 甘特图 甘特图是一种条形图,常用于计划和安排项目任务和事件。 下图显示了 JFreeChart 库中包含的甘特图的一些演示版本: JFreeChart 甘特图的示例 让我们以人口数量作为样本数据。 软件开发阶段 预计日期 实际日期   需求分析 2017-07-03 2017-07-07 2017-07-03 2017-07-05 需求设计 2017-07-10 201

  • 我将甘特图(ChartPanel)放在JScrollPane中,并创建一个名为[zoom in]的按钮。 按钮[zoom in]的功能是: 当我单击[zoom in]按钮时,图表面板的宽度将加倍。 点击【放大】按钮后,会出现JScrollPane的滚动条。 然后用户可以在放大后滚动观看整个图表。 但是有一个问题,当我加倍图表面板宽度时,任务标签字体也会放大。 在我把图表面板的宽度增加一倍后,有没有

  • 1. 前言 Markdown 的原生语法不支持绘制图形,但通过扩展模块,我们可以将一些格式化的文字渲染成我们需要的图形。常用的图形有 “流程图”、“时序图”、“类图”、“状态图”、“甘特图”、"饼图" 等。 本节将重点介绍如何通过 Mermaid 绘制「甘特图」。 甘特图 (Gantt chart) 也被称为横道图、条状图(Bar chart)。通常用于展示项目进度,它的核心对象是「时间」,并在时

  • 我正在使用使用d3开发的甘特图Dimitry Kudryavtsev实现一个日历小部件。我有活动——在这种情况下,这将是任务。我需要根据日历视图/日期显示事件的时间表。 我想要一个解决方案来避免在同一时间线上的任务重叠。我们怎么做? 例如,在当前的实施任务中,正如预期的那样重叠: (a)(b) |------[----|----] 我想要这样 (a) |---------| ......[----