【发布时间】:2017-02-16 05:19:42
【问题描述】:
我希望在 dc.js 的多维数据集中绘制几个与连续变量相关的直方图。虽然使用dc.barChart 组件很容易实现这一点,但我希望将这些直方图区域归一化。在我的情况下,bin 宽度是统一的,因此这减少了将每个 bin/组中的总计数除以 (binWidth * totCounts) 的问题。
我能够为这些直方图绘制一个初始视图,该直方图使用以下几行进行面积标准化:
var cf = crossfilter(data);
var totCounts = cf.groupAll().value();
var histDimension = cf.dimension(function(d) {
return Math.floor(d.fieldOfInterest / binWidth) * binWidth;
});
var histGroup = histDimension.group().reduceSum(function(d) {
return 1 / (binWidth * totCounts);
});
将此方法与 dc.js 结合使用确实会生成面积标准化条形图。但是,当我开始过滤数据时,过滤后的数据不会重新标准化。相反,视图总是通过未过滤数据集上的原始区域归一化的镜头呈现数据。
虽然我理解为什么会这样 - crossfilter 中的 reducer 函数仍在使用初始规范化......我真的不明白是否有任何合理且高效的方式来实现我正在寻找的东西......即,始终根据过滤后的数据集重新规范化 dc.js 绘图视图。在我看来,由于任何单个 bin/组的规范化需要来自所有组 (totCounts) 的信息,因此没有增量/高性能的方法来定义有效交叉过滤的归约函数。
我是否错过了一些明显的方法来实现我想要做的事情,或者这是我应该放弃能够在 crossfilter/dc.js 中实现的希望吗?如果有任何意见可以为我指明正确的方向,我将不胜感激。
【问题讨论】:
-
不要放弃希望!总有办法!
标签: dc.js crossfilter