Hola a todos,
He buscado un poco aquí y en la página de ejemplos, pero no he encontrado nada sobre los ejes de escala logarítmica. ¿Es posible crearlos? Si no es así, considérelo como una solicitud de función.
Atentamente,
Yakov.
Hola, lo siento, actualmente no. Ahora debe generar los datos en escala de logaritmos usted mismo y trazar.
Lo consideraré como una nueva característica más adelante.
Hola Masayuki,
necesitas generar los datos en escala de logaritmos
¿Quiere decir que ahora es posible emular esta función? He revisado los ejemplos de #Axis, pero no he notado una forma de colocar los ticks en posiciones arbitrarias. ¿Qué ejemplo debo buscar?
Saludos cordiales y gracias por su tiempo y su trabajo,
Yakov.
Cuando prepare sus datos, conviértalos a escala logarítmica. En Python, digamos que tiene una lista como esta
[100,1000,10000]
Tu solo haz esto
import math
log_list = map(math.log10,[100,1000,10000])
Una implementación de la solución alternativa de Masayuki:
data_test_original = ['data1', 10, 100, 1000, 3, 500, 50, 5, 3000]
data_test = ['data1'];
for(var i=1; i<data_test_original.length; i++){
data_test[i] = Math.log(data_test_original[i]) / Math.LN10;
}
var chart_test = c3.generate({
bindto: '#chart_test',
size: {
height: 240,
width: 480
},
data: {
columns: [
data_test
]
},
axis : {
y : {
tick: {
format: function (d) { return Math.pow(10,d).toFixed(2); }
}
}
},
});
hai @pbustosl , ¡es un trabajo para mí! gracias ... pero cuando tengo el valor 0 en data1, no funciona, ¿cómo puedo manejar el valor 0? Gracias
lo siguiente también formatearía los valores:
data_test_original = ['data1', 10, 100, 1000, 3, 500, 50, 5, 3000]
data_test = ['data1'];
for(var i=1; i<data_test_original.length; i++){
data_test[i] = Math.log(data_test_original[i]) / Math.LN10;
}
var chart_test = c3.generate({
size: {
height: 240,
width: 480
},
data: {
type:"bar",
columns: [
data_test
],
labels : {show:true,
format: {
data1 : function(d,id){console.log(id, Math.pow(10,d));return Math.pow(10,d).toFixed(0);}
}
}
},
axis : {
y : {
show:false,
tick: {
format: function (d) { return Math.pow(10,d).toFixed(0); }
}
}
},
});
eso es un truco bastante feo. ¿Sería posible exponer una API que permita conectar cualquier báscula d3?
+1 ... Necesito dibujar un gráfico en escala logarítmica.
También me gustaría tener la capacidad de configurar mi (s) eje (s) y por log
A mí también me gustaría poder usar una escala logarítmica para el eje y.
¿Alguna noticia sobre esto?
Intenté abordar este problema (# 2100). Esto no es 100% perfecto, pero puede ser suficiente para muchos casos.
Probé la solución alternativa
pero cuando el valor de los datos es 1, el eje y comenzaba desde 1. también cuando el valor de los datos era 0, el gráfico no se mostraba.
He hecho una solución para eso.
consulte este JSFiddle https://jsfiddle.net/86chryat/
d3.js admite directamente la escala logarítmica en un eje, por lo que sería muy bueno si eso pudiera aparecer en c3. Es una solución mucho mejor que volver a calcular los datos, porque también maneja los ticks.
Estoy de acuerdo en que la escala logarítmica sería útil
@ masayuki0812 : al cerrar esto, ¿significa que no considerará el soporte para él? Es realmente una característica crítica para ciertas aplicaciones. Sería genial tener una integración adecuada si tiene el tiempo o las ganas, por favor.
Comentario más útil
eso es un truco bastante feo. ¿Sería posible exponer una API que permita conectar cualquier báscula d3?