2011-07-21 9 views
5

Al utilizar un Eje lineal para el eje Y en un gráfico Visiblox, me gustaría obligar al eje a utilizar un número determinado de marcas importantes mientras sigue teniendo el juego de herramientas calcular automáticamente el rango del eje y las ubicaciones de marcas. Por ejemplo, puedo tener un eje Y primario y secundario y quiero que ambos ejes usen el mismo número de tics principales para que sus líneas de cuadrícula horizontales se superpongan. es posible?Eje de la fuerza para usar el número dado de marcas principales en el gráfico Visiblox

Respuesta

4

Hay un par de opciones. En primer lugar, puede establecer MajorTickInterval para forzar la distribución de los tics principales. Dependiendo de su caso de uso, es posible que necesite observar el rango real del eje y dividir por el número de ticks que desea para obtener un intervalo razonable.

La otra alternativa es subclasificar el eje y anular el método GetMajorTickValues, que es lo que el eje usa para determinar dónde colocar los ticks.

4

Si necesita imponer una relación entre los valores en sus ejes primario y secundario, esto se puede lograr mediante el enlace ElementName. Por ejemplo, puede enlazar el eje secundario MajorTickInterval al intervalo de garrapata computarizada del eje primario, ActualMajorTickInterval como sigue:

<Grid x:Name="LayoutRoot" Background="White"> 
    <vis:Chart x:Name="chart"> 
    <vis:Chart.YAxis> 
     <vis:LinearAxis x:Name="primaryAxis"/> 
    </vis:Chart.YAxis> 
    <vis:Chart.SecondaryYAxis> 
     <vis:LinearAxis MajorTickInterval="{Binding ElementName=primaryAxis, Path=ActualMajorTickInterval}"/> 
    </vis:Chart.SecondaryYAxis> 
    </vis:Chart> 
</Grid> 

Sin embargo, dependiendo de iones sus datos, que tienen el mismo intervalo de marcas para cada eje no puede causar su principales líneas de cuadrícula para coincidir. En este caso, es posible que desea enlazar el alse rango:

<Grid x:Name="LayoutRoot" Background="White"> 
    <vis:Chart x:Name="chart"> 
    <vis:Chart.YAxis> 
     <vis:LinearAxis x:Name="primaryAxis"/> 
    </vis:Chart.YAxis> 
    <vis:Chart.SecondaryYAxis> 
     <vis:LinearAxis Range="{Binding ElementName=primaryAxis, Path=ActualRange}" 
         MajorTickInterval="{Binding ElementName=primaryAxis, Path=ActualMajorTickInterval}"/> 
    </vis:Chart.SecondaryYAxis> 
    </vis:Chart> 
</Grid> 

Si necesita una lógica más compleja, podría ser posible hacerlo a través de convertidores de valores.

+0

Gracias por el ejemplo, sin embargo, esto no es exactamente lo que estaba pensando. En mi situación, podría ser que los datos en un eje varíen de 0 a 1 y, por otro lado, de 10,000 a 15,000. El objetivo entonces no es enlazar en intervalos o rangos de ticks absolutos, sino simplemente obligar al eje secundario a dibujar un buen conjunto de tics con la condición de que se use un número determinado de tics. Tampoco puedo tomar el rango predeterminado y dividir por la cantidad de tics que quiero, porque entonces las ubicaciones de ticks pueden no ser "bonitas". Quizás la única forma aquí es reescribir el algoritmo de posicionamiento tic. – Abiel

Cuestiones relacionadas