Highcharts,检测点是否是堆栈中的第一个

时间:2016-04-23 16:34:25

标签: javascript highcharts

所以我有一个高图,我想在每个堆栈的第一个点(即0点所在的位置)显示数据标签

我的配置如下:

{

  chart: {type: 'bar'},

  plotOptions: {
    series: {
      stacking: 'percent',
      dataLabels: {
        enabled: true,
        allowOverlap: true,
        formatter: function () {
          if (pointIsFirstInStack(this)) {
            return labelFunction(this);
          }
          return '';
        }
      }
    }
  },

  series: [{
     name: 'Available',
     data: [
       {x: 'Event1', y: 18},
       {x: 'Event2', y: 20}
     ]
  }, {
    name: 'Purchased',
    data: [
      {x: 'Event1', y: 23},
      {x: 'Event2', y: 40}
    ]
  }]
}

但是我很难实现pointIsFirstInStack功能,任何想法?

的问候,

埃纳尔

JSFiddle来说明我的图表:http://jsfiddle.net/qam37suh/

编辑:添加系列并堆叠到配置示例 edit2:添加了JSFiddle

1 个答案:

答案 0 :(得分:1)

您可以查看系列索引。

如果你总是要有两个系列,你可以这样检查:

formatter: function(){
  return this.series.index == 1 ? this.x : null;
}

示例:

Highcharts默认情况下将系列反向堆叠,因此索引0堆叠在顶部。

如果你想要一个动态数量的系列,你可以先添加一系列的系列检查,这样你仍然可以检查最后一个系列:

formatter: function(){
  var len = this.series.chart.series.length -1;
  return this.series.index == len ? this.x : null;
}

示例:

(您也可以在reversedStacks: false上设置yAxis,而只需检查index == 0

示例:

或者,如果你的目标是将类别放在系列中而不是外部,你可以移动它们:

xAxis: {
  categories: ['Event1', 'Event2'],
  labels: {
    x: 60,
    style: {
      fontWeight: 'bold',
      color: 'rgba(255,255,255,0.75)'
    }
   }
 }

示例: