¿Cómo hacer que el eje sea un número entero?
lo que he intentado es usar la opción tick:
tick: {
format: function(x) {
return (x == Math.floor(x)) ? x : "";
}
}
esto puede hacer que la etiqueta solo muestre un número entero, pero la línea divisoria en el eje aún existe.
¿Hay alguna forma de controlar el tic del eje?
en la versión de desarrollo actual (maestra) puede usar axis.y.values para establecer la lista de ticks. por ejemplo
{
axis: {
y: {
ticks: [1,2,3]
}
}
}
pero esto no puede ser dinámico en función de la fuente de datos, ¿verdad?
Puede calcular esos valores después de la carga de datos, establecerlo en chart.internal.config.axis_y_tick_values
y luego llamar a chart.flush()
para aplicar nuevos valores de eje.
¿Qué tal este código?
axis: {
y: {
tick: {
format: function (x) {
if (x != Math.floor(x)) {
var tick = d3.selectAll('.c3-axis-y g.tick').filter(function () {
var text = d3.select(this).select('text').text();
return +text === x;
}).style('opacity', 0);
return '';
}
return x;
}
}
}
}
Parece que ya está resuelto, así que déjeme cerrar.
FWIW, que requiere conocer los aspectos internos de D3 y ejecutar JS parece realmente extraño. Veo mucho ese patrón en estos problemas de C3: alguien tiene un problema y, en lugar de ofrecer una opción C3, 5-30 líneas de javascript que manipulan el SVG subyacente con d3 es la solución aceptada. Creo que a largo plazo eso será un gran detrimento para la adopción de C3.
Para este problema en particular, una opción "axis.y.tick.integer_only" sería de un valor increíble. Me encantaría proporcionar una extensión de C3 para esto. Veo una extensión de ejemplo aquí . ¿Hay una guía de extensión en algún lugar que pueda guiarme?
¡Gracias!
Editar: gramática.
Puede calcular esos valores después de la carga de datos, configurarlo en chart.internal.config.axis_y_tick_values y luego llamar a chart.flush () para aplicar nuevos valores de eje.
Refiriéndome a esto, porque también tuve este problema hoy: hacer flush()
estropeará la animación del cambio de datos, y agregar un retraso también tiene algunos problemas gráficos. Sin embargo, configurar chart.internal.config.axis_y_tick_values
al valor adecuado antes de llamar a load()
funciona perfectamente. Quizás esto sea útil para alguien :).
Mejor versión:
axis: {
y: {
tick: {
format: function(x) { return x % 1 === 0 ? x : ''; }
}
}
}
Gracias nnabinh - funcionó de maravilla.
Comentario más útil
Mejor versión: