Укладка возрастных диаграмм

#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
    })

});
  

Тем не менее, я думаю, что решение Себастьяна быстрее.