highcharts - example - Highchart: muestra/oculta un eje y sin ocultar la serie
legend highcharts (1)
Estoy trabajando con Highchart. Tengo un gráfico de series múltiples en el que cada serie tiene su propio eje y.
muy parecido a este (jsfiddle)
cuando hacemos clic en el elemento de leyenda para una serie, lo oculta y el eje y asociado (usando showEmpty:false
ayudó a ocultar también el nombre de los ejes)
Lo que intento lograr es ocultar el eje y de una serie determinada sin ocultar la serie en sí.
Traté de ocultarlo modificando la propiedad showAxis de esta manera:
serie.yAxis.showAxis = false;
pero no funciona. ¿Alguien sabe cómo debo hacer?
EDITAR: Logré editar el texto para poder eliminar el título del eje al establecer el texto como nulo, pero no es suficiente para ocultar todo el eje y sus valores.
esto es lo que hice para editar el texto:
serie.yAxis.axisTitle.attr({
text: null
});
Highcharts 4.1.9+
Desde 4.1.9, hay una opción Axis.visible que se puede usar para mostrar / ocultar un eje, demo: http://jsfiddle.net/3sembmfo/36/
Versiones anteriores de Highcharts
Es una característica nueva para Highcharts 3.0, que permite actualizar ejes en tiempo real: chart.yAxis[0].update(object)
- como objeto toma las mismas opciones que para crear un gráfico. Por ejemplo:
chart.yAxis[0].update({
labels: {
enabled: false
},
title: {
text: null
}
});
Y jsFiddle: http://jsfiddle.net/39xBU/2/
EDITAR:
Use el siguiente fragmento para ocultar / mostrar el eje con solo llamar a axis.hide()
y axis.show()
. Demostración en vivo: http://jsfiddle.net/39xBU/183/
(function (HC) {
var UNDEFINED;
HC.wrap(HC.Axis.prototype, ''render'', function (p) {
if (typeof this.visible === ''undefined'') {
this.visible = true;
}
if(this.visible) {
this.min = this.prevMin || this.min;
this.max = this.prevMax || this.max;
} else {
this.prevMin = this.min;
this.prevMax = this.max;
this.min = UNDEFINED;
this.max = UNDEFINED;
}
this.hasData = this.visible;
p.call(this);
});
HC.Axis.prototype.hide = function () {
this.visible = false;
this.render();
HC.each(this.plotLinesAndBands, function (plotLine) {
plotLine.render();
});
};
HC.Axis.prototype.show = function () {
this.visible = true;
this.render();
HC.each(this.plotLinesAndBands, function (plotLine) {
plotLine.render();
});
};
})(Highcharts);