我正在尝试生成盒子图。创建维度和组后,我按照给出的示例进行了操作 https://github.com/dc-js/dc.js/blob/master/web/examples/box-plot.html
我正在使用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/
干杯
答案 0 :(得分:1)
您可以使用reductio.dataList生成落入每个bin的原始行数组,而不是使用reductio将值聚合为和:
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.ta
和v.nc
执行任何操作。