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)
。
我一直在研究 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)
。