2017-07-12 27 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