Процентная доля показа пользовательской метки на Highcharts - PullRequest
0 голосов
/ 22 апреля 2019

Я хочу настроить не столбцы надписей на высоких чатах.
Вместо этого
enter image description here Я хочу показать ярлыки вот так
enter image description here

То, что я уже пробовал, это сделать еще одну серию, которая показывает процент. Но он не показывает, как ожидаемые результаты. Возможно ли это сделать в Highcharts?

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>

<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
<script>
  Highcharts.chart('container', {
    chart: {
        type: 'column'
    },

    title: {
        text: 'Show Percentage'
    },
    subtitle: {
        text: ''
    },
    xAxis: {
        categories: [
            'Jan',
            'Feb'
        ],
        crosshair: true
    },
    yAxis: {
        min: 0,
    },
    tooltip: {
        headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
        pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
            '<td style="padding:0"><b>{point.y:.1f} mm</b></td></tr>',
        footerFormat: '</table>',
        shared: true,
        useHTML: true
    },
    plotOptions: {
        column: {
            pointPadding: 0,
            borderWidth: 0
        },
        series : {
        	dataLabels : {
          	enabled :true
          }
        }
    },
    series: [
    {
        name: 'A',
        data: [100, 80]

    }, {
        name: 'B',
        data: [50, 40]

    }]
});
</script>

1 Ответ

0 голосов
/ 23 апреля 2019

Вы можете включить dataLabels только для первой серии и использовать событие render для правильного позиционирования этикеток:

chart: {
    type: 'column',
    events: {
        render: function() {
            var points = this.series[0].points,
                shapeArgs,
                y;

            points.forEach(function(point, i) {
                shapeArgs = point.shapeArgs;

                if (point.y > this.series[1].points[i].y) {
                    y = shapeArgs.y;
                } else {
                    y = this.series[1].points[i].shapeArgs.y;
                }

                y -= point.dataLabel.height;

                point.dataLabel.attr({
                    x: shapeArgs.x + shapeArgs.width - point.dataLabel.width / 2,
                    y: y
                });
            }, this);
        }
    }
},

Живая демонстрация: http://jsfiddle.net/BlackLabel/rqp5nb0a/

Справочник по API:

https://api.highcharts.com/class-reference/Highcharts.SVGElement#attr

https://api.highcharts.com/highcharts/chart.events.render

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