使用D3中的单个数据点格式化大美元值

时间:2015-07-07 16:05:31

标签: javascript d3.js

我有一个散点图,它根据用户输入过滤掉某些数据点。我正在使用d3.format以下列方式将我的X轴值作为美元返回:

var costFormatter = d3.format('$' + 's');

xAxis = d3.svg.axis().orient('bottom').tickFormat(function(d) {
  if (d === 0) { return 0; }
  else if (d < 0) { return ''; }
  else { return costFormatter(d);  } // returns $1.5M, 800k, etc.
});

当我有大量的点时,这有效,但是当我在散点图上得到一个点时,我有10个滴答,返回像$8.3498668M这样的数字。我希望该号码显示为$8.35M

注意:由于域和范围值是动态的,我无法使用 tickValues()

显式设置值

1 个答案:

答案 0 :(得分:1)

不幸的是你不能在d3.format中混合使用类型g和类型s,所以你必须这样做...

function f(x){
  return d3.format('$,s')(x.toPrecision(3));
}  

我做了一些实验,而且s类型似乎包含g行为,所以它更容易......

d3.format('$,.3s')  

将提供与上述功能相同的结果。