Instead of .hide()
you can usee .css()
instead: http://jsfiddle.net/KFpJC/2/
events: {
drilldown: function () {
var myAxis = this.xAxis[0];
var myPlotBands = myAxis.plotLinesAndBands;
$.each(myPlotBands, function (i, linesAndBands) {
linesAndBands.svgElem.hide();
if (linesAndBands.label) {
linesAndBands.label.css({
display: 'none'
});
}
});
},
drillup: function () {
$.each(this.xAxis[0].plotLinesAndBands, function (i, linesAndBands) {
linesAndBands.svgElem.show();
if (linesAndBands.label) {
linesAndBands.label.css({
display: 'block'
});
}
});
}
}
Most probably, label returns because it's positioned (x/y position and visibility) after other graphics are placed on a plotting area.