在Highcharts中为堆叠列图中的列禁用堆栈标签

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Highcharts中为堆叠列图中的列禁用堆栈标签相关的知识,希望对你有一定的参考价值。

我有一个像fiddle这样的堆积柱形图。 如果您看到那一列是灰色的,表示它已被禁用。我想从颜色为灰色的列顶部隐藏总数,或者将类别隐藏为“Pears”。 我在this回答中尝试过这种方法,但我无法弄清楚如何根据类别类型/列禁用堆栈总数?


由于链接到fiddle.net必须附带代码,这里是:

Highcharts.chart('container', {
  chart: {
    type: 'column'
  },
  title: {
    text: 'Stacked column chart'
  },
  xAxis: {
    categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas']
  },
  yAxis: {
    min: 0,
    title: {
      text: 'Total fruit consumption'
    },
    stackLabels: {
      enabled: true,
      style: {
        fontWeight: 'bold',
        color: (Highcharts.theme && Highcharts.theme.textColor) || 'gray'
      }
    }
  },
  legend: {
    align: 'right',
    x: -30,
    verticalAlign: 'top',
    y: 25,
    floating: true,
    backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || 'white',
    borderColor: '#CCC',
    borderWidth: 1,
    shadow: false
  },
  tooltip: {
    headerFormat: '<b>{point.x}</b><br/>',
    pointFormat: '{series.name}: {point.y}<br/>Total: {point.stackTotal}'
  },
  plotOptions: {
    column: {
      stacking: 'normal',
      dataLabels: {
        enabled: false,
        color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || 'white'
      }
    },
    series: {
      events: {
        afterAnimate: function(e) {
          var chart = e.target.chart;

          for (var j = 0; j < chart.series.length; j++) {
            for (var i = 0; i < chart.series[j].data.length; i++) {

              // alert(chart.series[j].data[i].category);
              if (chart.series[j].data[i].category == 'Pears') {
                chart.series[j].data[i].update({
                  color: 'grey'
                });
              }
            }
          }
        }
      },
    }
  },
  series: [{
    name: 'John',
    data: [5, 3, 4, 7, 2],
  }, {
    name: 'Jane',
    data: [2, 2, 3, 2, 1]
  }, {
    name: 'Joe',
    data: [3, 4, 4, 2, 5]
  }]
});
<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: 210px; height: 200px; margin: 0 auto"></div>
答案

您可以使用yAxis.stackLabels.formatterAPI)并使用当前标签x值(this.x)来查找所需的类别名称。

例如(JSFiddle):

yAxis: {
    stackLabels: {
        formatter: function() {
            // if this label is for pears, return nothing
            if(this.axis.chart.xAxis[0].categories[this.x] == 'Pears')
                return;
            // if not, return the default
            else
                return this.total; 
        }
    }
}
另一答案

就像你认为你可以用格式化程序选项API Doc做到这一点:

stackLabels: {
  enabled: true,
  style: {
    fontWeight: 'bold',
    color: (Highcharts.theme && Highcharts.theme.textColor) || 'gray'
  },
  formatter:function(){
      if (this.x !== 2) {
        return this.total;
      }
  }
}

this.x是每个类别的数组。

Fiddle

以上是关于在Highcharts中为堆叠列图中的列禁用堆栈标签的主要内容,如果未能解决你的问题,请参考以下文章

在 Bootstrap 4 中添加垂直堆叠列之间的间距

Highcharts - 堆叠图表上的系列顺序

图例与 Highcharts 中 xAxis 上的列刻度不匹配

如何在highcharts中为图例添加工具提示

如何在堆叠栏中为每个日期范围显示多个堆叠列

X 轴刻度不以高图表中的列系列为中心(jsFiddle)