highcharts - 使一列动态平均值?
highcharts - make one column dynamic average?
我有一个 highcharts 列,我向其中添加了一些数据。我还在其他列旁边添加了一个平均列。此 "average" 列与其他列同时使用静态值创建。
是否可以动态创建此平均列,以便在单击一个列名称(隐藏它)时,它也会重新计算平均列?
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]
}]
});
});
/尼克拉斯
您可以在 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]);
}
已更新 fiddle here。
谢谢!
就在你的 post 之前,我看到了 legendItemClick,从那里我几乎自己得到了它,但你的代码帮助我得到了最终结果。
但是,我最初的计划是让它与乘法系列一起工作,所以在我最终得到一个工作结果之前我遇到了一些问题。
这是完成的结果:
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);
});
}
已更新 fiddle 此处:http://jsfiddle.net/skorpion/L5chyc3e/
/尼克拉斯
我有一个 highcharts 列,我向其中添加了一些数据。我还在其他列旁边添加了一个平均列。此 "average" 列与其他列同时使用静态值创建。 是否可以动态创建此平均列,以便在单击一个列名称(隐藏它)时,它也会重新计算平均列?
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]
}]
});
});
/尼克拉斯
您可以在 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]);
}
已更新 fiddle here。
谢谢! 就在你的 post 之前,我看到了 legendItemClick,从那里我几乎自己得到了它,但你的代码帮助我得到了最终结果。
但是,我最初的计划是让它与乘法系列一起工作,所以在我最终得到一个工作结果之前我遇到了一些问题。
这是完成的结果:
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);
});
}
已更新 fiddle 此处:http://jsfiddle.net/skorpion/L5chyc3e/
/尼克拉斯