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/

/尼克拉斯