Eixo d3.js e nvd3.js e formatação de precisão de rótulo
Pergunta
Usando o gráfico de áreas empilhadas conforme visto neste exemplohttp://nvd3.com/ghpages/stackedArea.html
Tentando formatar os rótulos de escala do eixo y e os rótulos das dicas de ferramenta para serem inteiros em vez de flutuantes.Tentei alterar o código a seguir de
chart.yAxis
.axisLabel('Users')
.tickFormat(d3.format(',.2f'));
para
chart.yAxis
.axisLabel('Users')
.tickFormat(d3.format(',.0d'));
A precisão permanece inalterada (ainda mostra valores até a centésima casa).Eu segui o Github Wiki sem sucesso https://github.com/mbostock/d3/wiki/Formatting#wiki-d3_format
Qualquer sugestão ou sugestão será muito apreciada.
Solução
Parece isso não é suportado pelo nvd3 no momento.Veja a ofensa linha.
Além disso, sua especificação de formato não está correta.Conforme mencionado na documentação, "d"
ignora valores não inteiros.Então você provavelmente quer ",.0f"
em vez disso, o que significa:
,
:use vírgulas para separar milhares..0
: precisão de zero (o significado exato disso depende de qual tipo está em uso).f
:O tipo;nesse caso, Número.toFixed.Isto significa um número fixo de dígitos (o precisão) aparecem após a vírgula e o número é arredondado se necessário.
Outras dicas
este pode formatar o texto do rótulo de flutuante para inteiro.
para gráfico de pizza:
chart.pie.valueFormat(d3.format(',.0d'));
para gráfico de linhas:
chart.yAxisTickFormat(d3.format(',.0d'));
O .tickFormat
método no .yAxis
método não o atualiza corretamente.Esta é a solução alternativa que usei:
chart.yAxisTickFormat(d3.format(',.0d'));
Eu tentei assim
.axisLabel('%').tickFormat(function(d) { return parseFloat(d).toFixed(1) + "%"; });
Está funcionando para mim. Estou obtendo resultados com casas decimais e porcentagem.