2012-05-14 62 views
15

這個說法是什麼意思?d3.scale.quantile如何工作?

quantize = d3.scale.quantile().domain([0, 15]).range(d3.range(9)); 

只見域是:

0 - 0
1 - 15

範圍是從0到8和quantize.quantiles

0 - 1.6 
1 - 3.3 
2 - 4.9 
3 - 6.6 
4 - 8.3 
5 - 9.9 
6 -11.6 
7 -13.3 

如何計算quantize.quantiles的值?我試圖撥打quantize(2),但結果是1quantile如何工作?

+0

也許你知道分位數的含義以及它是如何工作的嗎? – user1365697

+3

如果您想更好地瞭解這些秤的工作原理,可以使用我製作的交互式[可視化](http://bl.ocks.org/aviddiviner/84d905e60c6788f77ee21d35f873b236)。 – Dave

回答

4

我會建議你閱讀過quantile scale documentation,尤其是在quantize.quantiles()

但基本上,D3看到,有基礎上,在輸出範圍爲這個規模9個值,因此它創建9個位數2值數據集:[0,15]。
這會導致您在問題中顯示的quantize.quantiles()值:[1.6,3.3,..,13.3],它們代表分位數的界限 - 任何小於1.6的值將映射到第一個元素輸出範圍(在這種情況下爲零)。小於3.3和大於1.6的任何值都將映射到輸出範圍的第二個元素(一個)。因此,按照預期量化(2)= 1。

21

分位數標度的動機是獲得代表數據集中實際值分佈的類。因此,有必要在施工期間提供完整的價值清單。比例尺然後將輸入域(由這些值定義)分割成間隔(分位數),以便大約相同數量的值落入每個間隔。

從文檔:

爲了計算位數,輸入域進行排序,並作爲離散值的羣體治療。

因此,指定域當我們在規模手值的整個列表:

var scale = d3.scale.quantile() 
    .domain([1, 1, 2, 3, 2, 3, 16]) 
    .range(['blue', 'white', 'red']); 

如果我們然後運行:

scale.quantiles() 

它將輸出[2,3 ]這意味着我們的價值羣體被分成這三個子集:

[1, 1] [2, 2] [3, 3, 16] 

請注意,當您要顯示的數據中存在異常值時,應避免使用此比例。在上面的例子中,16是一個落入上位分位數的異常值。它被分配與3相同的類別,可能不是所需的行爲:

scale(3) // will output "red" 
scale(16) // will output "red"