javascript - 格式线性比例大数替换 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”?谢谢。
解决方案
那format("2s")
是一个返回字符串的函数,而replace
应该在字符串本身上调用。
因此,它应该是:
.call(axisLeft(y).ticks(10).tickFormat(d => format(".2s")(d).replace("G","B")))
在这里,format(".2s")(d)
根据刻度返回格式化的字符串。最后,您的第二个片段几乎是正确的,但是您忽略了实际的刻度生成的刻度,只使用刻度的索引来获取数据值。
推荐阅读
- go - 同一项目中的多个模块
- angular - 如何使用嵌套表单数组将服务器响应映射到角度响应式表单
- javascript - jQuery滑块转换为香草JavaScript不起作用
- typescript - 导入带有类型信息的可选模块
- php - php中的数组输出格式
- angular - 如何在同一个 Angular 项目中使用两个不同的 UI (CSS) 框架,一个是移动的,另一个是桌面的
- javascript - 返回bool值,两个reduce在彼此的js中
- c++ - 为什么 C++ 不支持“嵌套注释”?
- java - 即使提交多个应用程序,SparkLauncher 也只启动一个应用程序
- javascript - 加载登录页面时加载模板文件/ index.html 文件