Highcharts:在悬停时将数据标签显示为相对值(百分比)

时间:2016-05-17 11:39:46

标签: javascript jquery charts highcharts

我正在尝试使用Highcharts软件创建一个具有悬停效果的条形图。图表应如下所示:http://www.computerbase.de/2016-02/directx-12-benchmarks-ashes-of-the-singularity-beta/#diagramm-ashes-of-the-singularity-1920-1080

您可以看到,一旦您将图表悬停在图表上,数据标签值就会变为百分比,并显示相对值。

创建图表本身不是问题。但是,更改数据标签是。如何循环所有数据标签,计算相对值并更新标签? API并没有说太多。

$('#container').highcharts({
    chart: {
        type: 'bar'
    },
    plotOptions: {
        bar: {
            dataLabels: {
                enabled: true
            }
        },
        series: {
            point: {
                events: {
                    mouseOver: function() {
                        // change text of all data labels
                        console.log(this);
                        console.log(this.chart);
                    }
                }
            }
        }
    }
});

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

chart.tooltip.options.formatter = function() {
    var xyArr=[];
    $.each(this.points,function(){
        xyArr.push('Serie: ' + this.series.name + ', ' +'X: ' + this.x + ', Y: ' +this.y);
    });
    return xyArr.join('<br/>');
}

实施例: http://jsfiddle.net/jugal/zAGGT/

答案 1 :(得分:0)

可以对mouseOver事件点上设置了新标签的数据执行Series.setData()。使用dataLabels format选项从点数据中获取标签,并在系列中设置key设置以设置标签信息。

示例:http://jsfiddle.net/pov2dt0q/

$(function() {
  var startingData = [
      [1, '1'],
      [2, '2'],
      [3, '3']
    ],
    percentData = [
      [
        [1, 'x 100%'],
        [2, '200%'],
        [3, '300%']
      ],
      [
        [1, '50%'],
        [2, 'x 100%'],
        [3, '150%']
      ],
      [
        [1, '33%'],
        [2, '66%'],
        [3, 'x 100%']
      ]
    ];
  $('#container').highcharts({
    series: [{
      type: 'bar',
      dataLabels: {
        enabled: true,
        inside: true,
        align: 'right',
        x: -5,
        format: '{point.label}'
      },
      data: $.extend([], startingData),
      keys: ['y', 'label'],
      point: {
        events: {
          mouseOver: function() {
            this.series.setData(percentData[this.x]);
          },
          mouseOut: function() {
            this.series.setData(startingData);
          }
        }
      }
    }]
  });
});