gpt4 book ai didi

javascript - 将饼图标签精确设置在 PIE highcharts 切片的中心

转载 作者:行者123 更新时间:2023-11-29 21:50:13 24 4
gpt4 key购买 nike

我在我的一个项目中使用 highcharts。使用的是Highcharts JQuery版本,引用如下:

http://code.highcharts.com/highcharts.js

绘制图表的代码如下:

$(function () {
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
type:'pie'
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr']
},

plotOptions: {
series: {
dataLabels: {
enabled: true,
formatter: function() {
return Math.floor(this.percentage*100)/100 + ' %';
},
distance: 20,
connectorWidth : 0,
color: 'rgb(0, 127, 209)'
}
}
},

series: [{
data: [29.9, 71.5, 106.4, 129.2,29.9, 71.5, 106.4,
129.2,29.9, 71.5, 106.4, 129.2]
}]
});
});

我面临的问题是 Slice 标签在这里和那里运行。我希望所有标签都位于每个切片的中心。

演示的 JS Fiddle 链接是 PIE Chart JSFiddle

最佳答案

最简单但不精确的方法是为数据标签设置负距离。距离的值将与图表的大小相关,因此可以在加载(以启动正确的位置)和重绘(图表大小更改后)事件中更新系列(数据标签的新距离)。

将每个数据标签放置在其切片中心的精确解决方案可以基于获取切片中心并将标签放置在那里。为了保持图表的响应能力,标签位置的这种调整应该在每次图表大小更改后执行 - 在图表的加载和重绘事件中。

示例:http://jsfiddle.net/mo8dfztx/2/

function redrawDatalabels() {
var chart = this,
cX = chart.series[0].center[0],
cY = chart.series[0].center[1],
shapeArgs, ang, posX, posY, bBox;

Highcharts.each(chart.series[0].data, function (point, i) {
if (point.dataLabel) {
bBox = point.dataLabel.getBBox();
shapeArgs = point.shapeArgs;
ang = (shapeArgs.end - shapeArgs.start) / 2 + shapeArgs.start;
posX = cX + (shapeArgs.r / 2) * Math.cos(ang);
posY = cY + (shapeArgs.r / 2) * Math.sin(ang);

point.dataLabel._pos.x = posX + ((point.labelPos[6] == "right" ? (1) : (-1)) * bBox.width/2);
point.dataLabel._pos.y = posY - bBox.height/2;
}
});
chart.series[0].placeDataLabels();
}

$(function () {
$('#container').highcharts({
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false,
events: {
load: redrawDatalabels,
redraw: redrawDatalabels
}
},
title: {
text: 'Browser market shares at a specific website, 2014'
},
tooltip: {
pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
connectorWidth: 0,
format: '<b>{point.name}</b>: {point.percentage:.1f} %',
style: {
color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
}
}
}
},
series: [{
type: 'pie',
name: 'Browser share',
data: [
['Firefox', 50],
['IE', 50],
['Safari', 25],
['Opera', 25]
]
}]
});
});

关于javascript - 将饼图标签精确设置在 PIE highcharts 切片的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29665491/

24 4 0