2017-10-19 8 views
1

d3.scaleQuantile()の範囲は、数値の出力を得るためにd3.scaleQuantile()を使用していますが、d3.scaleQuantile()の範囲は8つの数値の配列です。 console.log()は範囲の中央の数値を返します。その範囲の最初のものを返します。コードは次のようになりますscaleQuantile関数が期待したものを出力しない

var sortMass = d3.scaleQuantile() 
    .domain([minMass, maxMass]) 
    .range([2000,4000,6000,8000,100000,120000]) 
console.log(sortMass(6500)) // here shows 2000 

6000または8000のいずれかを返すと、それは意味があります。しかし、なぜ出力が2000であるのかわかりません。私はD3のドキュメントを読みましたが、私はまだ混乱しています。誰でも関数d3.scaleQuantile()の機能について説明できますか?

答えて

1

ここでは誤解があります.D3スケールでは、どのようなスケールでも、範囲内の値をスケールに渡しません。その代わりに、ドメイン内の値を渡します。あなたは、スケールにminMassとmaxMassの間の値を渡した場合、あなたの規模与えそう

、...

var sortMass = d3.scaleQuantile() 
    .domain([minMass, maxMass]) 
    .range([2000, 4000, 6000, 8000, 100000, 120000]); 

は...、それは範囲に対応した値を返します。ここで

は、私が1000maxMassminMassを設定しています基本的なデモ、次のとおりです。

var minMass = 0, 
 
    maxMass = 100; 
 
var sortMass = d3.scaleQuantile() 
 
    .domain([minMass, maxMass]) 
 
    .range([2000, 4000, 6000, 8000, 100000, 120000]); 
 

 
d3.range(0, 110, 10).forEach(function(d) { 
 
    console.log("for the value " + d + ", the output is:" + sortMass(d)) 
 
})
<script src="https://d3js.org/d3.v4.min.js"></script>

私はあなたがminMassとして範囲の限界を使用していると思われますおよびmaxMass。その場合、実際には動作しません。ドメインはと等しく、ドメインはセグメントに分割されています。のは、それを証明してみましょう:

var sortMass = d3.scaleQuantile() 
 
    .domain([2000,120000]) 
 
    .range([2000, 4000, 6000, 8000, 100000, 120000]); 
 

 
console.log(sortMass(6500))
<script src="https://d3js.org/d3.v4.min.js"></script>

と出力で2000が適切期待されています。上記の私の仮定が正しければ

したがって、あなたの代わりに、しきい値スケールを使用する必要があります。

var thresholds = [2000, 4000, 6000, 8000, 100000, 120000]; 
 
var sortMass = d3.scaleThreshold() 
 
    .domain(thresholds) 
 
    .range(thresholds); 
 

 
console.log(sortMass(6500))
<script src="https://d3js.org/d3.v4.min.js"></script>

を結論:

だから、あなたの質問に答えるために:

誰もどのようにd3.scaleQuantile()の機能が説明できますか?任意のD3の規模については

、あなたはドメインに応じて値を渡すと、スケールが範囲に応じた値を返します。覚えておいてください:

  • ドメイン →が入力されています。
  • 範囲 →が出力されます。
+1

ありがとうございました!答えはとても明快で、とても役に立ちます。しかし、あなたの答えによると、私はあなたが言ったことについてはまだ混乱しています>ドメインは等分に分かれています。私はminMassとmaxMassとして範囲の限界を使いました。あなたはもう少し、ドメインがどのように等しく分割されているのか、なぜそれがうまくいかないのかを説明できますか?再度、感謝します! –

+1

2000から120000を使用する場合、118000のギャップがあります.6で割った値は約20000です。したがって、20000の後では出力範囲が次の範囲になります。 –

+1

ありがとうございました。今私は完全に理解した。 –

関連する問題