Highcharts堆叠柱状图数据标签计算平均值如何忽略零值

问题背景
现有堆叠图表已经实现零值隐藏效果,但堆叠标签的平均值计算逻辑存在偏差:
- 原逻辑固定除以全量系列总数,把值为0、实际不显示的系列也计入分母,导致平均值计算结果不准
- 当前在用的
yAxis.StackLabels.formatter配置代码:
function() { return Highcharts.numberFormat(this.total / this.axis.chart.series.length); }
比如总共有3个系列时,分母固定返回3,但如果当前x轴点位下有1个系列值为0、实际不参与堆叠展示,正确的分母应该是2。
测试取单系列对应点位的返回数据为42,0,0,0,0,57,确实存在多个0值点位。
修复方案
在formatter逻辑里先遍历所有系列,统计当前x点位下值非0的有效系列数量,再用堆叠总和除以有效系列数即可,替换后的代码如下:
function() { let validSeriesCount = 0; // 遍历系列统计当前x位置非0的有效系列数 this.axis.series.forEach(series => { const currentVal = series.yData[this.x]; // 排除0、null、undefined值,有其他过滤规则可自行修改判断条件 if (currentVal !== 0 && currentVal != null) { validSeriesCount++; } }); // 处理无有效数据场景,避免除以0报错 const average = validSeriesCount > 0 ? this.total / validSeriesCount : 0; return Highcharts.numberFormat(average); }
如果你的零值判定规则不是严格等于0(比如小于某个阈值就隐藏不计入统计),直接修改if判断里的条件即可。
内容的提问来源于stack exchange,提问作者vdot
相关产品推荐
相关产品推荐

