以十的幂表示显示大值

时间:2012-10-09 10:04:03

标签: javascript d3.js

我在d3.js工作,我遇到了问题。我正在使用教程和示例制作图表。我的问题是,在我的图表的Y轴上,我有非常大的值,如(120000000000),这是动态的。我无法在有限的空间中显示这些值。那么有没有办法以12X10 ^ 10或任何其他方式使用d3显示10的幂的这些大值?

现在我正在使用这样的比例

功率比例

y = d3.scale.pow().exponent(0.3).domain([0, maxvalue ])
                                .range([Height, 0]).nice();

对数比例

y = d3.scale.log().clamp(true).domain([0.1, maxvalue])
                               .range([height, 0]).nice();

线性比例

y = d3.scale.linear().domain([0, maxvalue])
                     .range([height, 0]).nice();

这适用于所有比例

yAxis = d3.svg.axis().scale(y).ticks(6, tickFormatForLogScale)
                                   .orient('left');

任何正确显示值的帮助都会有所帮助。

由于

2 个答案:

答案 0 :(得分:0)

Javascript有方法toPrecision:

 var anumber=123.45
 anumber.toPrecision(2) //returns 1.2e+2

答案 1 :(得分:0)

在修改示例后,我能够制作看起来像log y linear x graph的内容:http://d3-example.herokuapp.com/examples/area/area.html

我更改了以下内容:

   var data = d3.range(500).map(function(i) {
     return {x: i , y: i*i};
     //return {x: i / 39, y: (Math.sin(i / 3) + 2) / 4};
   });

  var y = d3.scale.log().clamp(true)
       .domain([1, 220000])
       .range([height, 0]);

  var x = d3.scale.linear()
       .domain([0, 500])
       .range([0, 900]);

这似乎不直观,但他height变量和900文字定义了渲染图的大小。这可能是由于数据的定义方式(参数化功能)。要使这项工作,你必须调整map的域(function(i){...})。 i变量将被赋予值[domain [0],....,domain 1],并且x和y都使用map函数中的相应数学表达式计算。

我不知道这对你有多大用处,因为你没有展示其余的代码。如果您仍然感到困惑,请尝试使用http://www.geogebra.org/绘制一些对数比例图表,以全面了解它们的工作原理。

这是我得到的: logarithmic y scale