我在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');
任何正确显示值的帮助都会有所帮助。
由于
答案 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/绘制一些对数比例图表,以全面了解它们的工作原理。
这是我得到的: