stack栏中如何显示stack的个数?

问题描述 投票:0回答:2

我正在为我的应用程序使用 highcharts,根据我的要求,我需要在列堆栈图中显示堆栈的数量。

我的密码是

Highcharts.chart('container', {
    chart: {
        type: 'column'
    },
    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },
    yAxis: {
        stackLabels: {
            style: {
                color: 'black'
            },
            enabled: true,
            y: 0,
             formatter: function () {             
                return this.total +"-"+this.touched;
            }
        }
    },
    plotOptions: {
        column: {
            stacking: 'normal',
            pointPadding: 0,
            groupPadding: 0,
            dataLabels: {
                enabled: false
            }
        }
    },

    series: [{
        data: [129.9, 71.5, 106.4]
    },{
        data: [144.0, null, null]
    },{
        data: [800, null, 135.6]
    }]
});

在 StackLabels 中我使用“this.touched”,但我需要显示可见堆栈的数量

请看下面的例子

javascript angular charts highcharts
2个回答
0
投票

不幸的是,它并没有那么简单,因为在

stackLabels.formatter()
函数中没有堆栈中点的总和的属性,并且不可能在这个函数中引用点来计算它。但是,您可以使用
chart.events.render()
回调函数自己将这样的属性添加到标签对象。

Highcharts.chart('container', {
  chart: {
    type: 'column',
        events: {
            render: function() {
                const chart = this;
                
                chart.yAxis.forEach(function(axis) {
                    Object.values(axis.stacking.stacks["column,,,"]).forEach(function(stack, i) {
                        let sum = 0;
                        chart.series.forEach(function(series) {
                            if (series.data[i].y && series.visible) sum++;
                        });
                        stack.sum = sum;
                    });
                })
                chart.render();
            }
        }
  },
  xAxis: {
    categories: ['Jan', 'Feb', 'Mar']
  },
  yAxis: {
    stackLabels: {
      enabled: true,
      formatter: function() {
        return this.sum;
      }
    }
  },
  plotOptions: {
    column: {
      stacking: 'normal',
      pointPadding: 0,
      groupPadding: 0,
      dataLabels: {
        enabled: false
      }
    }
  },

  series: [{
    data: [129.9, 71.5, 106.4]
  }, {
    data: [144.0, null, null]
  }, {
    data: [800, null, 135.6]
  }]
});
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/accessibility.js"></script>

<div id="container"></div>

演示https://jsfiddle.net/BlackLabel/1seubjon/
APIhttps://api.highcharts.com/highcharts/chart.events.render


0
投票

不知道对不对。可能还有另一种更简单的方法。但这适用于您的情况。请检查。

Highcharts.chart('container', {
    chart: {
        type: 'column'
    },
    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },
    yAxis: {
        stackLabels: {
            style: {
                color: 'black'
            },
            enabled: true,
            y: 0,
            formatter: function () {
              let count = 0;
              for (let i=0; i<this.touched; i++) {
                if (this.points[i] !== null) count++;
              }
              return count;
            }
        }
    },
    plotOptions: {
        column: {
            stacking: 'normal',
            pointPadding: 0,
            groupPadding: 0,
            dataLabels: {
                enabled: false
            }
        }
    },

    series: [{
        data: [129.9, 71.5, 106.4]
    },{
        data: [144.0, null, null]
    },{
        data: [800, null, 135.6]
    }]
});
© www.soinside.com 2019 - 2024. All rights reserved.