我有一个highcharts专栏,我已经添加了一些数据。我还在其他列旁边添加了一个平均列。这"平均"使用静态值创建列,与其他列同时创建。 是否可以动态创建此平均列,以便在单击一列名称(隐藏它)时,还会重新计算平均列?
这里的jsfiddle: http://jsfiddle.net/skorpion/L5chyc3e/
$(function () {
$('#container').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Title'
},
subtitle: {
text: 'subtitle'
},
xAxis: {
categories: [
'Columns'
]
},
yAxis: {
min: 0,
title: {
text: 'y Axis'
}
},
plotOptions: {
column: {
pointPadding: 0.2,
borderWidth: 0
}
},
series: [{
name: '1',
data: [5]
}, {
name: '2',
data: [15]
}, {
name: '3',
data: [7]
}, {
name: 'Average',
data: [9]
}]
});
});
/尼克拉斯
答案 0 :(得分:2)
您可以在legendItemClick
event:
legendItemClick: function () {
var thisSeries = this;
var tot = 0, num = 0;
var aveSeries = null;
this.chart.series.forEach(function(d,i){
if (d.name == "Average"){
aveSeries = d;
return;
}
if (thisSeries == d && d.visible){
return;
}
if (thisSeries != d && !d.visible){
return;
}
tot += d.data[0].y;
num += 1.0;
});
var ave = tot/num;
aveSeries.setData([ave]);
}
更新了小提琴here。
答案 1 :(得分:0)
谢谢! 就在你的帖子之前,我看到了legendItemClick,从那里我几乎得到了它,但是你的代码帮助我得到了最终结果。
然而,我最初的计划是让它与multiply系列一起工作,所以我遇到了一些问题,直到我最终达到了工作效果。
这是完成的结果:
legendItemClick: function(){
var tot=0,num=0,avg=0;
thisSeries=this;
if(this.name=="Average"){
return false;
}
this.data.forEach(function(ser,serI){
ser.series.chart.series.forEach(function(col,colI){
if(col.name=="Average"){
avgCol=col;
return;
}
if(thisSeries==col && col.visible){
return;
}
if(thisSeries!=col && !col.visible){
return;
}
tot+=col.data[serI].y;
num++;
});
avg=tot/num;
tot=0;
num=0;
avgCol.data[serI].update(avg);
});
}
在这里更新了小提琴:http://jsfiddle.net/skorpion/L5chyc3e/
/ Niclas