首页 > 解决方案 > 格式线性比例大数替换 G 到 B

问题描述

我正在尝试格式化 d3 图表的线性比例。我的 y 尺度通常是数十亿。我使用下面的代码:

 const yAxis = g => g
.attr("transform", `translate(${margin.left},0)`)
.call(axisLeft(y).ticks(10).tickFormat(format(".2s")))

但是当我的 y 轴达到数十亿时,这给了我“G”而不是“B”的单位。 看截图

所以我用这个替换了我的代码的最后一行:

    .call(axisLeft(y).ticks(10).tickFormat(format(".2s").replace("G","B")))

但我得到了一个 typeError: ×

TypeError: Object(...)(...).replace 不是函数

我也试过这个:

    .call(axisLeft(y).ticks(10).tickFormat((d, i)=>format(".2s")(data[i].value).replace("G", "B")))

但是我的滴答声不再是“nice()”,而且订单全乱了。

在此处输入图像描述

如何将我的设备从“G”更换为“B”?谢谢。

标签: javascriptd3.jsfrontenddata-visualization

解决方案


format("2s")是一个返回字符串的函数,而replace应该在字符串本身上调用。

因此,它应该是:

.call(axisLeft(y).ticks(10).tickFormat(d => format(".2s")(d).replace("G","B")))

在这里,format(".2s")(d)根据刻度返回格式化的字符串。最后,您的第二个片段几乎是正确的,但是您忽略了实际的刻度生成的刻度,只使用刻度的索引来获取数据值。


推荐阅读