dc.js boxplot b.map(...).sort 不是函数

dc.js boxplot b.map(...).sort is not a function

我正在尝试生成箱线图。在创建维度和组之后,我遵循了给出的示例 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.

我添加了一个 fiddle 来重现这个问题。 https://jsfiddle.net/momhzyxp/7/

干杯

您可以使用 reductio.dataList 生成落入每个 bin 的原始行的数组,而不是使用 reductio 将值聚合成总和:

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

reducer(skuGroup);

然后,假设你想用 each ta 除以 each 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 做任何你喜欢的事)。

你的 fiddle 的分支:https://jsfiddle.net/oawbzdgy/11/