dc.js:具有嵌套分组的Boxplot

时间:2017-07-15 12:57:43

标签: javascript dc.js crossfilter

我一直在玩dc.js / crossfilter.js并遇到一个我无法绕过头脑的问题。我的数据坚持这种模式:

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

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

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

我不知道如何在dc.js中做到这一点 - 如果我按月分组然后将其用于我的箱图,我每个月会得到一个盒子,这些措施会引用一些条目。这对dc.js来说是有意义的。框架,但那不是我想要的。

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

祝你好运

修改:Added rendered boxplot

1 个答案:

答案 0 :(得分:0)

是的,方框图期望group.all()返回一组键/值对,其中值是一个数组数组。

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

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

one_bin获取原始组和密钥名称;它生成一个带有一个键/值的数组,其中键是键名,值是来自原始组的所有值的数组。

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维度无关。

示例小提琴:https://jsfiddle.net/q8m54cg3/15/

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

相关问题