2011-11-18 26 views
8

Tengo datos basados ​​en el tiempo que van de 1 a 500. El tiempo se traza en el eje xy los valores están en el eje y.Cómo establecer un valor mínimo estático para los ejes en Highcharts

Cuando el rango entre los puntos de datos mínimos y máximos es excelente, la etiqueta de inicio del eje Y es 0. Puedo decirle a Highcharts que no muestre la etiqueta configurando yAxis.startOnTick = false;, pero eso no es lo que busco.

Here is a jsfiddle del problema donde no se puede saber si el primer punto es 0 o algún otro valor. Tener 0 aquí también se ve como el rango mínimo para y es 0, no 1.

Can Highcharts muestra la primera etiqueta y la primera etiqueta siempre debe establecerse en el valor mínimo en el conjunto de datos (relativo a su eje).

Respuesta

9

Me sorprende lo difícil que es esto. No es una solución óptima, pero la mejor I can dream up con el API del HighChart:

var someData = [1,5,82,9,300,5,42,199,5,6,99,1,56,52,250,64]; 

var chart = new Highcharts.Chart({ 

    chart: { 
     renderTo: 'container' 
    }, 
    yAxis:{ 
     min: -10, 
     tickInterval: 1, 
     labels: { 
      formatter: function() { 
       if (this.value < someData[0]) 
        return null; 
       else if (this.value == someData[0]) 
        return this.value; 
       else if (this.value % 50 == 0) 
        return this.value; 
      } 
     } 
    }, 
    series: [{ 
     data: someData 
    }] 

}); 

enter image description here

+0

+1. Esto es mucho mejor de lo que se me ocurrió: solo le estaba diciendo a Highcharts que cuando la etiqueta es "0", muestra "1" en su lugar. Necesitaré hacer un preprocesamiento adicional de los datos para que la solución funcione al 100% con mis conjuntos de datos, es decir, establecer el intervalo de marcación adecuado y determinar el valor más bajo en el conjunto de datos. ¡Gracias! –

+0

Oh, probablemente también haga un procesamiento adicional para configurar solo tickInterval en 1 cuando Highcharts va a querer establecer la primera etiqueta en "0", a menos que no exista mucha sobrecarga al llamar a 'labels. formateador' hasta 500 veces. –

+0

Esto ya no funciona, con la versión 4. Todavía estoy buscando una solución. – Syl

3

Una solución (que optimiza Marks answer) es utilizar yAxis.labels.formatter con this.isFirst y this.axis.dataMin, así:

yAxis:{ 
    labels: { 
     formatter: function() { 
      if(this.isFirst) 
       return this.axis.dataMin; 
      return this.value; 
     } 
    } 
} 

Ver this JSFiddle demo para un ejemplo.

La ventaja de esto es que no tiene que configurar manualmente tickInterval, lo que ahorra muchas llamadas a formatter y permite a Highcharts determinar los intervalos de etiqueta. Además, utiliza el conocimiento de los ejes del valor mínimo de los datos, en lugar de tener que comparar con una matriz (que puede tener que iterar para encontrar el mínimo).

Tenga en cuenta que el yAxis.min debe establecerse en algo sensato aquí (funciona mejor con 0, y datos positivos). Si el eje y va muy por debajo del punto de datos mínimo, la primera etiqueta no será la que esté en 0.

El valor this.axis no estaba disponible cuando se formuló esta pregunta.

Cuestiones relacionadas