饼图中的 dataLabels 距离不能按数据点覆盖(请参阅源代码中的ieSeries 类中的翻译函数)。
但是,它可以按系列设置。而且,您可以设置一个饼图,其中包含具有相同中心的一大堆系列,并且每个系列都占据一个楔形。这还需要一点工作。
这显示了如何覆盖饼图每个切片的半径:我可以使用 Highcharts 为每个饼图分配不同的半径吗? https://stackoverflow.com/questions/35414875/can-i-assign-a-different-radius-for-each-pie-slice-using-highcharts/35416334#35416334
同样的概念也适用于您。但不要更改每个系列的大小,而是有条件地更改每个系列的 dataLabels 距离:http://jsfiddle.net/f7m58t9j/1/ http://jsfiddle.net/f7m58t9j/1/
$(function() {
var data = [{
name: 'One',
y: 5,
color: 'red'
}, {
name: 'Two',
y: 5,
color: 'blue'
}, {
name: 'Three',
y: 30,
color: 'purple'
}, {
name: 'Four',
y: 20,
color: 'green'
}, {
name: 'Five',
y: 30,
color: 'black'
}, {
name: 'Six',
y: 2,
color: 'grey'
}, {
name: 'Seven',
y: 1,
color: 'pink'
}];
var total = data.map(function(el){return el.y;})
.reduce(function(p,c){
return p+c;
});
var newData = data.map(function(el){
el.count = el.y;
el.y = el.y*100/total;
return el;
});
data = newData;
var start = -90;
var series = [];
for (var i = 0; i < data.length; i++) {
var end = start + 360 * data[i].y / 100;
series.push({
name:"Count",
type: 'pie',
size: 200,
dataLabels: {
distance: data[i].y > 20 ? -30 : 30
},
startAngle: start,
endAngle: end,
data: [data[i]]
});
start = end;
};
console.log(series);
$('#container').highcharts({
series: series
});
});