【问题标题】:Highcharts, detect if point is first in stackHighcharts,检测点是否在堆栈中的第一个
【发布时间】:2016-04-25 21:47:08
【问题描述】:

所以我有一个高图,我想只在每个堆栈的第一个点(即 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

【问题讨论】:

  • 类似this?
  • 能贴出整个图表配置吗?我想看看您的数据是如何堆叠的
  • 我为你添加了更多配置@LucaRegazzi
  • 如果堆栈顺序从不改变,则很容易实现。您可以全局禁用数据,然后在第一个堆叠系列上启用它们Fiddle

标签: javascript highcharts


【解决方案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;
}

例子:

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

例子:

)

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

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

例子:

【讨论】:

  • 太棒了,有效...不知道反向堆叠的事情
猜你喜欢
  • 2016-08-26
  • 2020-04-30
  • 2012-03-16
  • 2010-10-19
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
相关资源
最近更新 更多