Javascript 以十的幂表示大的值

Javascript 以十的幂表示大的值,javascript,d3.js,Javascript,D3.js,我在d3.js中工作,我遇到了一个问题。我正在使用教程和示例制作一个图表。我的问题是,在图形的Y轴上,我有非常大的值,比如(120000000000),它们是动态的。我无法在有限的空间中显示这些值,所以有没有一种方法可以用10的幂来显示这些大值,比如12X10^10,或者使用d3的任何其他方法 现在我用的是这样的秤 功率等级 y = d3.scale.pow().exponent(0.3).domain([0, maxvalue ])

我在d3.js中工作,我遇到了一个问题。我正在使用教程和示例制作一个图表。我的问题是,在图形的Y轴上,我有非常大的值,比如(120000000000),它们是动态的。我无法在有限的空间中显示这些值,所以有没有一种方法可以用10的幂来显示这些大值,比如12X10^10,或者使用d3的任何其他方法

现在我用的是这样的秤

功率等级

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');
对数刻度

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');
线性比例

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');
这在所有音阶中都很常见

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');
任何有助于正确显示值的帮助都会很有帮助


谢谢,Javascript有精确的方法:

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

在修改以下示例后,我能够制作出类似于对数y线性x图的图形:

我更改了以下内容:

   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]);
这似乎不直观,但他
高度
变量和900文本定义了渲染图形的大小。这可能是由于数据是如何定义的(参数化函数)。为了实现这一点,您必须调整map的域(函数(i){…})。i变量将被赋予值[domain[0],..,domain],并且x和y都是用map函数中相应的数学表达式计算的

我不知道这对您有多有用,因为您还没有展示其余的代码。如果您仍然感到困惑,请尝试使用绘制一些对数比例图,以大致了解它们的工作原理

以下是我得到的:

log-y图中的x值域通常比y值域“小”得多,因为“大”域1-1000万:被log()函数压缩。所以我猜x域的
maxvalue
在你的图中太多了。谢谢@shaun5,但这个函数似乎不适合与d3.js一起使用:(非常感谢你的详细回答…..但我有点不明白,因为我是d3新手。以下是我的几个问题:1)你是否更改要绘制的数据?如果是,为什么?2) 还有线性和幂标度呢?我将数据显示在x²的图形上,因为示例中的正弦函数从未显示为任何高值,并且因为您没有提供要绘制的函数(数据集)。我不知道你所说的功率等级是什么意思。