Я рассмотрел ответ на этот вопрос , который поднимает ряд последующих вопросов об обобщении решения для поддержки переменного числа строк в категории, теперь, когда у меня есть свой код для разделения различных задач в нужные строки.
Я использовал оригинальную скрипку и изменил ее, см. здесь , чтобы лучше понять концепцию.
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" десятичную часть смещения категории, и нам нужно применить преобразование к серии категорий.
Что неясно, так это то, как получены значения для breakSize, translate offset и "y".
Далее теперь используется серия для каждой категории, в то время как мы можем генерировать диаграммы из одной серии, например дерева. сетка, поэтому мы должны здесь разбить данные на отдельные серии? Мы предлагаем нашему пользователю возможность управлять сериями, чтобы они соответствовали легенду, так что это может быть проблемой.
Я заметил, что вы добавили цвет, и когда я не часто, я не видел свой диапазон, зачем это нужно?
Наконец, вы заметите, что в моей скрипке есть дополнительная категория с именем "3", которая появляется. Посмотрел на json входящий в метод ganttchart и после преобразования basi c, и я не вижу намека на то, откуда это может прийти?