highcharts - 使一列动态平均值?

时间:2015-01-04 15:52:37

标签: jquery highcharts

我有一个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]
        }]
    });
});

/尼克拉斯

2 个答案:

答案 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