我使用highcharts进行统计数据显示。我想在堆栈标签上显示所有值的平均值。
以下是我正在做的事情,但我似乎无法做到正确:
yAxis: {
min: 0,
title: {
text: 'Task'
},
stackLabels: {
style: {
color: 'black'
},
enabled: true,
formatter: function() {
return (this.axis.series[1].yData[this.x]).toPrecision(2) + '%';
}
}
},
以上仅采用堆栈上的最后一个值并显示百分比。例如,如果最后一个值为50,则上面显示50%作为堆栈值。我想取所有值的平均值。任何帮助,将不胜感激。
答案 0 :(得分:1)
如果要显示任何堆栈的百分比,则表示如果堆叠柱具有两个堆叠A-5和B-10,则列中的B%为66%,A的百分比为33%。如果要在格式化函数中显示使用以下内容(请参阅This Fiddle Link)
formatter: function() {
return (this.axis.series[1].yData[this.x] / this.total * 100).toPrecision(2) + '%';
}
根据OP的评论进行更新 Refer Working fiddle here
使用以下代码:在变量中生成数据并计算总和
var seriesData = [{
name: 'Incomplete',
data: [1, 3, 4, 7, 20]
}, {
name: 'Complete',
data: [3, 4, 4, 2, 5]
}];
var total = 0;
$.each(seriesData,function(item){
$.each(seriesData[item].data,function() {
total += this;
});
});
然后在stacklabel formatter中使用以下代码:
formatter: function() {
return ( this.total/ total * 100).toPrecision(2) + '%';
}
series:seriesData
希望它有所帮助:)
答案 1 :(得分:0)
这似乎并不像应该的那样容易。
我会通过预处理数据来生成平均数组,然后从stackLabels格式化函数中引用该数组来实现此目的。
示例,构建平均值(假设数组'数据'以及每个系列数据值的子数组):
var sum = 0;
var averages = [];
var dataLen = data.length;
$.each(data[0], function(x, point) {
sum = 0;
for(var i = 0; i < dataLen; i++) {
sum += data[i][x];
}
averages.push(sum/dataLen);
})
然后在格式化程序中:
yAxis : {
stackLabels: {
enabled: true,
formatter: function() {
return Highcharts.numberFormat(averages[this.x],2);
}
}
}
示例:
如果我能找到一种方法来获得每个堆栈中可靠的点数,你可以使用
return this.total/countOfPoints;
,无需构建数组,但我似乎无法可靠地计算数据。