Gor*_*ath 3 highcharts pie-chart
我正在使用highchart的饼图,并且一些设置是:
pie: {
borderColor: '#000000',
innerSize: '60%'
},
series: [{
data: [
['projected Income', 44.2],
['Discount', 26.6],
['Annual Loss', 20]
]}]
}
Run Code Online (Sandbox Code Playgroud)
现在,我的要求是在年度亏损图上显示箭头,如蓝色图片所示。可以在Highcharts的饼图中实现此功能吗?我已经看到了许多示例,但这些示例已针对线图进行了说明。
对于折线/散点图/条形图,可以使用批注,但不适用于饼图/圆环图。
因此,使用SVGRenderer可以向饼图/圆环图中添加额外的SVG元素。
在下面的示例中,我使用SVG标记作为箭头画了一条线:
Highcharts.chart('container', {
chart: {
type: 'pie'
},
title: {
text: "My Title"
},
tooltip: {
pointFormat: '{series.name}: <b>{point.y:.1f}</b>'
},
plotOptions: {
pie: {
borderColor: '#000000',
innerSize: '60%',
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: false,
format: '<b>{point.name}</b>: {point.y:.1f}',
}
}
},
series: [{
data: [
['projected Income', 44.2],
['Discount', 26.6],
['Annual Loss', 20]
]
}]
}, function(chart) {
var point = chart.series[0].data[2];
var dx = chart.plotBox.x,
dy = chart.plotBox.y;
var radius = point.shapeArgs.r;
var angle = (point.shapeArgs.start + point.shapeArgs.end) / 2,
x = (radius * .9 * Math.cos(angle)) + point.shapeArgs.x,
y = (radius * .9 * Math.sin(angle)) + point.shapeArgs.y;
var x2 = (radius * 1.5 * Math.cos(angle)) + point.shapeArgs.x,
y2 = (radius * 1.5 * Math.sin(angle)) + point.shapeArgs.y;
var text = chart.renderer.text(
'Annual Loss',
x2 + dx, y2 + dy
).attr({
zIndex: 5
}).add(),
box = text.getBBox();
text.attr({
dx: -box.width / 2
});
chart.renderer.rect(box.x - 5 - box.width / 2, box.y - 5, box.width + 10, box.height + 10, 5).attr({
fill: '#FFFFEF',
'stroke': 'red',
'stroke-width': 1,
zIndex: 4
}).add();
console.log(point, chart);
chart.renderer.path({
'stroke': '#ff0000',
'stroke-width': 3,
'marker-end': "url(#markerArrow2)",
zIndex: 3,
'd': ['M', x2 + dx, y2 + dy, 'L', x + dx, y + dy]
}).add();
});Run Code Online (Sandbox Code Playgroud)
<script src="https://code.highcharts.com/highcharts.js"></script>
<div id="container" style="min-width: 310px; height: 400px; max-width: 600px; margin: 0 auto"></div>
<svg style="height: 0">
<defs>
<marker id="markerArrow" markerWidth="13" markerHeight="13" refX="2" refY="6"
orient="auto">
<path d="M2,2 L2,11 L10,6 L2,2 Z" style="fill: red;" />
</marker>
<marker id="markerArrow2" markerWidth="10" markerHeight="10" refX="6" refY="6"
orient="auto">
<path d="M2,2 L10,6 L2,10 L6,6 L2,2 Z" style="fill: red;" />
</marker>
</defs>
</svg>Run Code Online (Sandbox Code Playgroud)
这是jsFiddle的链接:https ://jsfiddle.net/beaver71/k091v22e/