2016-08-24 37 views
0

我highcharts馅饼数据如下:更新特定切片

series: [{ 
    name: 'Brands', 
    colorByPoint: true, 
    data: [{ 
     name: 'Microsoft Internet Explorer', 
     y: 56.33 
    }, { 
     name: 'Chrome', 
     y: 24.03, 
     sliced: true, 
     selected: true 
    }, { 
     name: 'Firefox', 
     y: 10.38 
    }, { 
     name: 'Safari', 
     y: 4.77 
    }, { 
     name: 'Opera', 
     y: 0.91 
    }, { 
     name: 'Proprietary or Undetectable', 
     y: 0.2 
    }] 
}] 

我知道我可以做更新的第一片的y value

var chart = $('#pie_chart').highcharts(); 
chart.series[0].data[0].update(100); 

或者,我可以全部改变通过使用json的数据:

chart.series[0].setData(json); 

但是,如何更改特定切片的值ba sed就是它的名字。例如,如果我不知道切片的顺序(例如:我需要按名称引用它),那么如何更改Firefox切片的y value

+1

使用每个点的'id'属性和[get](http://api.highcharts.com/highcharts/Chart.get)方法来获取点并更新它。 –

+0

示例[here](http://jsfiddle.net/sh4Lsw12/) –

+0

非常感谢。这正是我需要的。 – darkpool

回答

1

您可以迭代数据以找到适当的索引。

var series = [{ 
    name: 'Brands', 
    colorByPoint: true, 
    data: [{ 
     name: 'Microsoft Internet Explorer', 
     y: 56.33 
    }, { 
     name: 'Chrome', 
     y: 24.03, 
     sliced: true, 
     selected: true 
    }, { 
     name: 'Firefox', 
     y: 10.38 
    }, { 
     name: 'Safari', 
     y: 4.77 
    }, { 
     name: 'Opera', 
     y: 0.91 
    }, { 
     name: 'Proprietary or Undetectable', 
     y: 0.2 
    }] 
}] 
var i; 
var idxFound = -1; 
for (i = 0; i < series[0].data.length; i++) { 
    if (series[0].data[i].name === 'Firefox') { 
    idxFound = i; 
    break; 
    } 
} 
if (idxFound !== -1) { 
    series[0].data[idxFound].y = 9; 
    console.log(series[0].data[idxFound]); // { name: 'Firefox', y: 9 } 
} 

如果jQuery是你的事,你可以试试下面,有一个newArray给你的用户代理名称为存储具有相同索引。然后你可以查看newArray之后:

var newArray = $.map(series[0].data, function (obj, i) { return obj.name; }); 
var i = newArray.indexOf('Firefox'); 
series[0].data[i].y = 9; 
console.log(series[0].data[i]); // Object { name="Firefox", y=9} 

但它可以很容易地做到没有jQuery做一个newArray。