Ваша попытка ломает stackLabel логики вычислений c - реализация этого типа решения потребует некоторых изменений в коде ядра.
Я думаю, что лучшим решением будет рендеринг этих меток под столбцами. Вот как это сделать:
Демо: https://jsfiddle.net/BlackLabel/akoeyq5m/
events: {
render() {
let chart = this,
stackMale = chart.yAxis[0].stacks['column,male,,'],
stackFemale = chart.yAxis[0].stacks['column,female,,'];
// Male label
for (let i in stackMale) {
let x = stackMale[i].label.x + chart.plotLeft,
y = chart.plotHeight + chart.plotTop,
labelBBox;
if (stackMale[i].customLabel) {
stackMale[i].customLabel.destroy();
}
stackMale[i].customLabel = chart.renderer.text('Male', x, y)
.add();
labelBBox = stackMale[i].customLabel.getBBox();
stackMale[i].customLabel.translate(-labelBBox.width / 2, labelBBox.height)
}
// Female label
for (let i in stackFemale) {
let x = stackFemale[i].label.x + chart.plotLeft,
y = chart.plotHeight + chart.plotTop,
labelBBox;
if (stackFemale[i].customLabel) {
stackFemale[i].customLabel.destroy();
}
stackFemale[i].customLabel = chart.renderer.text('Female', x, y)
.add();
labelBBox = stackFemale[i].customLabel.getBBox();
stackFemale[i].customLabel.translate(-labelBBox.width / 2, labelBBox.height)
}
}
}
Не стесняйтесь тестировать и улучшать этот код. Если что-то неясно - просто спросите.
API: https://api.highcharts.com/class-reference/Highcharts.SVGRenderer#text
API: https://api.highcharts.com/highcharts/chart.events.render