2016-04-07 18 views
0

我有以下的自定義功能降低自定義排序減少dc.js功能crossfilter.js

function reduceAdd(p, v) { 
    p.vol_t += v.oqt; 
    p.prc_t += v.it; 
    ++p.count; 
    // p.average = d3.round((p.total/p.count), 2); 
    return p; 
} 

function reduceRemove(p, v) { 
    p.vol_t -= v.oqt; 
    p.prc_t -= v.it; 
    --p.count; 
    // p.average = d3.round((p.total/p.count), 2); 
    return p; 
} 

function reduceInitial() { 
    return { 
    vol_t: 0.0, 
    prc_t: 0.0, 
    count: 0, 
    }; 
} 

我的數據模型如下:

[{cat:'a', oqt:23.0, it: 45.0}, 
    {cat:'b', oqt:25.0, it: 5.0}, 
    {cat:'b', oqt:22.0, it: 25.0}, 
    {cat:'c', oqt:17.0, it: 35.0}] 

我試圖繪製用dc.js將vol_t表示爲X(keyAccessor),將prc_t表示爲Y軸(valueAccessor)並計爲radiusAcessor。我如何找到所有組的最大值和最小值。我的羣組基於類別'貓'維度。

謝謝!

回答

2

您可以定義任意排序基於其價值的一組:https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_order

但是,如果您使用的是dc.js氣泡圖,我不認爲有必要定義任何特定的順序。你只需要定義適當的訪問器。

+0

我需要它爲我的軸的域和範圍。我想我想按top(1)[0]的順序計算最大值,最小值。所以對於X軸,我必須按體積訂購,對於Y軸我必須按價格訂購。 – bashhike

+0

如果您正在尋找一次設置域名,那麼您不希望爲此使用Crossfilter。只需將數據轉換爲數字列表(使用Array.map)並使用Math.min和Math.max即可。或者如果您願意,也可以使用d3.extent。如果你使用的是elasticX/elasticY,那麼我認爲dc.js會爲你處理。 –

1

通過使用d3.extent和傳遞類別組和accessor函數返回音量和價格來解決此問題。