#javascript #highcharts #stacked-chart
#javascript #высокие диаграммы #stacked-диаграмма
Вопрос:
Я хочу создать столбчатую диаграмму с возрастными интервалами.
У меня есть двумерный массив, содержащий ключ age и значение.
Идея такова: каждый отдельный возраст накладывается друг на друга в пределах своего интервала и, таким образом, представляет накопленное количество людей в пределах возрастного интервала в одном столбце.
Я хочу подойти к этому решению на примере столбчатой диаграммы highcharts с накоплением.
Пока это мой код:
// Age stacked column chart.
var ageData = [
[0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 4], [9, 3],
[10, 24], [11, 33], [12, 31], [13, 21], [14, 61], [15, 42], [16, 43], [17, 87], [18, 64], [19, 120],
[20, 134], [21, 142], [22, 184], [23, 221], [24, 234], [25, 211], [26, 198], [27, 94], [28, 79], [29, 34],
[30, 24], [31, 27], [32, 32], [33, 21], [34, 4], [35, 7], [36, 11], [37, 5], [38, 3], [39, 6],
[40, 3], [41, 4], [42, 13], [43, 6], [44, 4], [45, 3], [46, 1], [47, 2], [48, 2], [49, 0],
[50, 0], [51, 34]]
$('#container_stackedColumn').highcharts({
chart: {
type: 'column'
},
title: {
text: 'User age distribution'
},
xAxis: {
categories: [
'0-12',
'13-18',
'19-23',
'24-28',
'29-35',
'36-42',
'43-50',
'>50'
]
},
yAxis: {
min: 0,
title: {
text: 'Number of users'
},
stackLabels: {
enabled: true,
style: {
fontWeight: 'bold',
color: (Highcharts.theme amp;amp; Highcharts.theme.textColor) || 'gray'
}
}
},
plotOptions: {
column: {
stacking: 'normal',
dataLabels: {
enabled: true,
color: (Highcharts.theme amp;amp; Highcharts.theme.dataLabelsColor) || 'white',
style: {
textShadow: '0 0 3px black, 0 0 3px black'
}
}
}
},
series: [{ /* --- What to do here?! --- */ }]
});
Итак, учитывая мой двумерный массив, как мне визуализировать эту столбчатую диаграмму с накоплением?
Любая помощь приветствуется. 🙂
Комментарии:
1. Мое первоначальное беспокойство здесь заключается в том, что каждый возраст должен быть серией, а это означает, что в каждой серии будет только одна ненулевая запись. Это не обязательно неправильно, но и не кажется идеальным.
Ответ №1:
Вам нужно настроить его на вас arrays
, сравнить с имеющимися у вас ограничениями (категории) и нажать, чтобы исправить массив рядов.
Смотрите синтаксический анализатор (http://jsfiddle.net/W6AFY/3 /) надеюсь, что это правильно.
Ответ №2:
Или другое решение, использующее разные ряды для каждой части столбца: http://jsfiddle.net/s9qHH/48 /
var ranges = [12, 18, 23, 28, 35, 42, 50, 1000],
rangesLen = ranges.length,
series = [];
$.each(ranges, function(i, e){
series.push({ //create series' containers for legend
id: e 'index',
name: e
});
});
$.each(ageData, function(i, e){
var x = e[0],
y = e[1],
index = 0;
while(ranges[index] < x){ // get category index
index ;
}
series.push({
showInLegend: false,
linkedTo: ranges[index] 'index', // link to container series
data: [ [index, y] ] //add point at specific category
})
});
Тем не менее, я думаю, что решение Себастьяна быстрее.