2016-09-17 15 views
2

私はUdacityの無料d3コースで作業しています。d3.scale.pow(0.5)とd3.scale.sqrt()の値の差異

私たちが取り組んでいる演習の1つは、入力の平方根に基づいてスケールを作成することです。私はマップするときに、しかし

var y1 = d3.scale.sqrt().domain([52070,1380000000]).range([10,50]); 

var y2 = d3.scale.pow(0.5).domain([52070,1380000000]).range([10,50]); 

:マッピング機能がx^(0.5)と同等です

y = constant * sqrt(x) 

sqrt(x)以来のようになります、私はd3.js、次の2つの部分が同じ正確なマッピングを提供しなければならないと思いましたドメインの両端の数が、私は異なる出力を得る:

Y1(1000000)= 10.836195102634587

Y2(1000000)= 10.027477268653174

は、誰かが2つのスケールが等価であるというのが私の仮定の欠陥が何であるかを説明できますか?

ありがとうございました!

答えて

1

指数部を間違った場所に定義しています。あなたのpow()スケールは、このようなexponent定義に設定します。

var y2 = d3.scale.pow().exponent(0.5).domain([52070,1380000000]).range([10,50]); 

をそして、あなたは両方のスケールのための正しい値を取得します:

var y1 = d3.scale.sqrt().domain([52070,1380000000]).range([10,50]); 
 

 
var y2 = d3.scale.pow().exponent(0.5).domain([52070,1380000000]).range([10,50]); 
 

 
console.log(y1(1000000)) 
 
console.log(y2(1000000))
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
:ここ

console.log(y1(1000000))//returns 10.836195102634587 
console.log(y2(1000000))//returns 10.836195102634587 

することは、作業の抜粋です

説明:

pow()のかっこ内には値を入れないでください。ここに値を入れることはできますが、効果はありません。だから、あなたは何時に:のと同じだ

var y2 = d3.scale.pow(0.5).domain([52070,1380000000]).range([10,50]); 

:何exponentを持っていない、と1のデフォルト値を使用しています

var y2 = d3.scale.pow().domain([52070,1380000000]).range([10,50]); 

を。したがって、前の2つの行は同じである:ここで証明する別の断片である

var y2 = d3.scale.pow().exponent(1).domain([52070,1380000000]).range([10,50]); 

その:

var test1 = d3.scale.pow(0.5).domain([52070,1380000000]).range([10,50]); 
 
var test2 = d3.scale.pow().domain([52070,1380000000]).range([10,50]); 
 
var test3 = d3.scale.pow().exponent(1).domain([52070,1380000000]).range([10,50]); 
 

 
console.log(test1(1000000)); 
 
console.log(test2(1000000)); 
 
console.log(test3(1000000));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>