dc.js:带嵌套分组的箱线图

dc.js: Boxplot with nested grouping

我一直在研究 dc.js/crossfilter.js,遇到了一个我无法解决的问题。我的数据遵循这种模式:

[2016-02-01, "Lorem ipsum", -45] [2016-02-03, "Lorem ipsum", 34] [2016-03-04, "Lorem ipsum", 101] ...

所以基本上是一个时间序列,每天都有一个数值。我想做的是:用 一个单框 绘制一个箱线图,显示月总和的中位数等(即一个月的总和由一个点反映,胡须显示分位数所有月份)。这意味着我必须按月 group/sum 才能首先获得这些值:

[2016-02, 79] [2016-03, 101] ...

虽然我不知道如何在 dc.js 中做到这一点 - 如果我按月分组然后将其用于我的箱线图,我每个月都会得到一个箱子,并且度量值参考各个条目。这对 dc.js' 框架有意义,但这不是我要找的。

关于如何做到这一点的任何想法?感谢您的帮助!

此致

编辑:

是的,箱形图需要 group.all() 到 return 一个 key/value 对数组,其中值是一个数字数组。

当您需要为图表重塑交叉过滤器数据时,fake group 是目前最好的技术。这是一个实现 dc.js 使用的唯一方法的对象,(*) group.all(),从交叉过滤器组中提取数据:

function one_bin(group, key) {
  return {
    all: function() {
      return [{
        key: key,
        value: group.all().map(kv => kv.value)
      }];
    }
  };
}

one_bin 取原始组和一个键名;它生成一个包含一个 key/value 的数组,其中键是键名,值是原始组中所有值的数组。

one_bin包装你的原始组并将其传递给箱线图:

var box = dc.boxPlot('#box')
  .width(200).height(500)
  .dimension(monthDim) // this is actually wrong but can't brush anyway
  .group(one_bin(monthGroup, 'all months'))
;

刷当然不行,但是这个图表的x维度只能是all-or nothing。

示例fiddle:https://jsfiddle.net/q8m54cg3/15/

(*) 自 dc.js 2.1; 2.0 及以下版本也使用 group.top(N)