Highcharts Datalabel 'callout' Shape Not Working For Donut Chart
Solution 1:
I examined this subject and it seems that it's rather tricky thing to do in Highcharts.
The library uses SVGRenderer.label
(https://api.highcharts.com/class-reference/Highcharts.SVGRenderer#label) function for creating the data labels.
Chevron (small arrow) appears in callout
shape label only when xAnchor
and yAnchor
are definded and necessary conditions from the Highcharts.Renderer.prototype.symbols.callout
function are satisfied (https://github.com/highcharts/highcharts/blob/master/js/parts/SvgRenderer.js). When data labels are generated for pie series these values are not defined - chevron doesn't appear.
You have overwritten this function and hardcoded the label path - that's not the solution when you want it to be responsive.
Here's a workaround that I found:
I set dataLabels.format
to empty string - the label are generated, but they're not visible, because they have no content. I use their position in chart.events.render
to generate new labels:
render: function() {
var chart = this,
series = chart.series[0],
renderer = chart.renderer;
series.points.forEach(function(p) {
var dl = p.dataLabel,
x = dl.x + chart.plotLeft,
y = dl.y + chart.plotTop,
chartCenterX = chart.chartWidth / 2,
chartCenterY = chart.chartHeight / 2,
anchorX,
anchorY;
// destroy the old labelif (dl.customLabel) {
dl.customLabel.destroy();
}
// definitions for all the directionsif (x < chartCenterX && y < chartCenterY) { // right bottom corner chevron
anchorX = x + 30;
anchorY = y + 50;
} // more should be added here// create custom label
dl.customLabel = renderer.label(p.name, x, y, 'callout', anchorX, anchorY).attr({
fill: 'blue'
}).css({
color: 'white'
}).add();
});
}
Live demo:http://jsfiddle.net/kkulig/8s968m7f/
The biggest challenge here is to find a proper coordinates for anchors. I only did that for the label(s) in the top-left part of the plot area (it's just for example purposes - better formulas need to be found). I used the dimensions of the chart to compute these values.
It's not very elegant solution, but if you find proper formulas and do some coding it'll work.
Post a Comment for "Highcharts Datalabel 'callout' Shape Not Working For Donut Chart"