【发布时间】:2016-02-17 06:25:08
【问题描述】:
交叉过滤器是否在操纵我的数据?
背景
我已经执行了服务器端所需的所有处理,并且只想准确地绘制 json 管道中的内容。到目前为止,我已经让图表完全按照我想要的方式工作,只是我的数据似乎被操纵了。
这是我的交叉过滤器代码:
ndx = crossfilter(rData);
runDimension = ndx.dimension(function (d) { return [+d.series, +d.norm_1]; });
runGroup = runDimension.group();
runGroup.reduceSum(function (d) { return d.value;});
注意:norm_1 是唯一的
问题
基本上我注意到两个问题:
- 我知道我的所有数据都将介于 -1 和 1 之间(我已经运行了几次检查来测试这一点),但是在绘制它时我发现它在某些地方下降到 -1.4。
- 我的服务器正好发送了 1000 行数据,但是通过对一些 dc.js 代码设置断点,我可以看到它只绘制了 752 行数据。
更多证据
在我的图表上,我设置了 valueAccessor 并添加了一些检查来测试超出范围的值,我可以非常清楚地看到它超出了范围:
.valueAccessor(function (d) {
if (d.value > 1 || d.value < -1) {
console.log(d);
}
return d.value;
})
来自服务器的数据在进入交叉过滤器之前需要进行少量格式化(它以表格形式出现,需要拆分为系列对象)。我以此为契机测试了数据是否超出范围,我可以清楚地看到它在范围内:
for (var i = 0; i < $scope.remoteData.rows.length; i++) {
for (var j = 0; j < $scope.remoteData.labels.length; j++) {
var label = $scope.remoteData.labels[j];
var value = $scope.remoteData.rows[i][label];
if (value > 1 || value < -1) {
console.log({
label: label,
i: i,
series: j,
norm_1: $scope.remoteData.rows[i].norm_1,
value: value,
});
}
rData.push({
series: j,
norm_1: $scope.remoteData.rows[i].norm_1,
value: value
})
}
}
讨论
我怀疑我的问题与以下问题有关:
runGroup.reduceSum(function (d) { return d.value;});
此函数是否将某些数据点加在一起?
【问题讨论】:
标签: reduce dc.js crossfilter