Olá pessoal,
Pesquisei um pouco aqui e na página de exemplos, mas não encontrei nada sobre eixos em escala de logaritmo. É possível criá-los? Caso contrário, considere isso como um pedido de recurso.
Atenciosamente,
Yakov.
Oi, desculpe, atualmente não. Agora você precisa gerar os dados em escala de logaritmo sozinho e plotar.
Vou considerar como um novo recurso mais tarde.
Olá Masayuki,
você precisa gerar os dados em escala de logaritmo
quer dizer que agora é possível emular esse recurso? Eu olhei os exemplos #Axis, mas não encontrei uma maneira de colocar os ticks em posições arbitrárias. Que exemplo devo examinar?
Atenciosamente e obrigado pelo seu tempo e trabalho,
Yakov.
Ao preparar seus dados, converta-os em escala logarítmica. Em Python, digamos que você tenha uma lista como esta
[100,1000,10000]
Você acabou de fazer isso
import math
log_list = map(math.log10,[100,1000,10000])
Uma implementação da solução 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 ,, funciona para mim! thx ... mas quando eu tenho o valor 0 em data1, não funciona, como posso lidar com o valor 0? obrigado
o seguinte também formata os 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); }
}
}
},
});
isso é um hack muito feio. seria possível expor uma API que permite que qualquer escala d3 seja plugada?
+1 ... eu preciso desenhar um gráfico em escala logarítmica.
Também gostaria de poder definir meu (s) eixo (s) y como log
Eu também gostaria de poder usar uma escala logarítmica para o eixo y.
Alguma novidade sobre isso?
Tentei resolver este problema (# 2100). Isso não é 100% perfeito, mas pode ser suficiente para muitos casos.
Tentei uma solução alternativa
mas quando o valor dos dados é 1, o eixo y estava começando em 1. também quando o valor dos dados era 0, o gráfico não era renderizado.
eu fiz algumas soluções alternativas para isso.
consulte este JSFiddle https://jsfiddle.net/86chryat/
d3.js oferece suporte direto à escala de log em um eixo, então seria muito bom se isso pudesse ser mostrado em c3. É uma solução muito melhor do que recomputar os dados, porque também lida com os ticks.
Eu concordo que a escala logarítmica seria útil
@ masayuki0812 - ao fechar isso, significa que você não considerará o suporte para ele? É realmente um recurso crítico para certos aplicativos. Seria ótimo ter uma integração adequada se você tiver tempo / inclinação, por favor.
Comentários muito úteis
isso é um hack muito feio. seria possível expor uma API que permite que qualquer escala d3 seja plugada?