2017-07-12 23 views
1

我正在嘗試生成箱形圖。建立維和組之後,我跟着在 https://github.com/dc-js/dc.js/blob/master/web/examples/box-plot.htmldc.js boxplot b.map(...)。sort不是函數

給出的例子中,我使用reductio使減排更容易:

var ndx = crossfilter(ds); 
var skuDim = ndx.dimension(function(d){ return d.sku; }); 
var skuGroup = skuDim.group(); 

var reducer = reductio(); 
reducer 
    .value('_nc') 
    .sum(function(d){ 
     return d.nc; 
    }); 
reducer 
    .value('_ta') 
    .sum(function(d){ 
     return d.ta; 
    }); 

reducer(skuGroup); 

我還使用一個valueAccessor我組:

.valueAccessor(function(p){ 
    return p.value._nc.sum ? Math.round(p.value._ta.sum/p.value._nc.sum * 100)/100 : 0; 
    }) 

我得到這個錯誤:

TypeError: b.map(...).sort is not a function. 

我已經添加了一個小提琴來複制這個問題。 https://jsfiddle.net/momhzyxp/7/

乾杯

+1

箱線圖需要每個值是一個數組 - 它看起來像你已經聚集在你的例子中的數據。相反,您需要提供實際值(如鏈接示例中所做的那樣)。我不確定reductio如何做到這一點,但我已經添加了標籤,並希望@EthanJewett會下降 - 看起來可能是[valueList](https://github.com/crossfilter/reductio#aggregations- standard-aggregations-reductio-value-list)或[dataList](https://github.com/crossfilter/reductio#aggregations-standard-aggregations-reductio-data-list)。 – Gordon

+0

謝謝@Gordon。傳遞一組值。它現在有效。無法讓reductio工作,雖然:| – bashhike

回答

1

而不是使用反證法的價值觀聚集成款項,您可以使用reductio.dataList產生落入每個倉原行的排列:

var reducer = reductio(); 
reducer 
    .value('_rows') 
    .dataList(true); 

reducer(skuGroup); 

然後,假設你想除以每個ta各自nc(不知道你在這裏做什麼),valueAccessor看起來像:

.valueAccessor(function(p){ 
    var values = p.value._rows.dataList.map(function(v, i) { 
     return v.nc ? Math.round(v.ta/v.nc * 100)/100 : 0; 
    }); 
    return values; 
    }) 

(或者你可以做任何你喜歡的每個v.tav.nc)。

你撥弄叉:https://jsfiddle.net/oawbzdgy/11/

+0

就是這樣!謝謝@Gordon。 – bashhike