Столбчатая диаграмма Highcharts - как получить значения стеков - PullRequest
0 голосов
/ 16 ноября 2018

Я создал гистограмму с накоплением в верхних диаграммах, но когда данные перекошены, столбцы не видны или числа перекрываются, как показано на рисунке ниже.

enter image description here

Я видел много постов, но нет готового решения для этого, поэтому я делаю свое собственное решение.

Я устанавливаю высоту по умолчанию 150, если значение yменьше 150.

enter image description here

Это решение работает, но общее количество баров теперь отображается как 300 вместо фактического исходного значения.Как я могу самостоятельно изменить общую стоимость стека?Я не могу найти способ сделать это.

Вот код для изменения высоты на значения по умолчанию.Я сохраняю фактическое значение в переменной realValue в точечном объекте.

chartOptions = {
        type: CHARTING.CHART_OPTIONS.TYPE.COLUMN,  
        // On chart load, apply custom logic
        events : {
            load: function () {
                var chart = this,
                    minColHeightVal = 150;

                chart.series.forEach(function (s) {
                    s.points.forEach(function (p) {

                        if (p.y < minColHeightVal) {
                            p.update({
                                y: minColHeightVal,
                                realValue: p.y
                            }, false);
                        }
                    });
                });

           // How to iterate over the bars here and sum the actual value? i.e. point.realValue and set the stacklabel?


                chart.redraw();
            }
        }
    }

1 Ответ

0 голосов
/ 19 ноября 2018

Вы пытались использовать опцию minPointLength? В вашем случае это может быть более простое решение: https://api.highcharts.com/highcharts/series.column.minPointLength

Однако, используя ваш код для получения желаемого результата, используйте функцию stackLabels.formatter:

        formatter: function() {
            var series = this.axis.series,
                x = this.x,
                sum = 0;

            series.forEach(function(s) {
                if (s.points && s.points[x]) {
                    sum += s.points[x].realValue ? s.points[x].realValue : s.points[x].y
                }
            });

            return sum;
        }

Демонстрационная версия: https://jsfiddle.net/BlackLabel/uocdykbL/

Справочник по API: https://api.highcharts.com/highcharts/yAxis.stackLabels.formatter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...