dc.js boxplot b.map(…).sort is not a function
我正在尝试生成箱形图。创建维度和组后,我按照在
https://github.com/dc-js/dc.js/blob/master/web/examples/box-plot.html
我正在使用还原法来简化还原操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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:
1 2 3 | .valueAccessor(function(p){ return p.value._nc.sum ? Math.round(p.value._ta.sum / p.value._nc.sum * 100) / 100 : 0; }) |
我遇到此错误:
1 | TypeError: b.map(...).sort is not a function. |
我添加了一个小提琴来复制此问题。 https://jsfiddle.net/momhzyxp/7/
干杯
您可以使用reductio.dataList生成落入每个bin中的原始行的数组,而不是使用reductio将值聚合为总和:
1 2 3 4 5 6 | var reducer = reductio(); reducer .value('_rows') .dataList(true); reducer(skuGroup); |
然后,假设您想将每个
1 2 3 4 5 6 | .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; }) |
(或者您可以对每个
小提琴的叉子:https://jsfiddle.net/oawbzdgy/11/