【发布时间】:2017-09-19 08:41:10
【问题描述】:
我正在尝试使用 dc.js 实现实时数据可视化(即定期收到新数据)。我遇到的问题如下 - 当新数据添加到图中时,已经存在的点经常开始“跳舞”,即使它们没有改变。这可以避免吗?
following fiddle 说明了这一点。
我的猜测是交叉过滤器在内部对数据进行排序,这会导致图表上的点移动,以获取更改其在内部存储中的位置(索引)的数据项。数据添加方式如下:
var data = [];
var ndx = crossfilter(data)
setInterval(function() {
var value = ndx.size() + 1;
if (value > 50) {
return;
}
var newElement = {
x: myRandom(),
y: myRandom()
};
ndx.add([newElement]);
dc.redrawAll();
}, 1000);
有什么想法吗?
【问题讨论】:
-
我将问题描述得更像:Crossfilter 组和维度都返回有序数据,但 d3.js(构建 dc.js)默认假设数据点由它们在数据数组中的索引。我认为可以更新 dc.js 散点图以使用组键作为索引?没有把握。我相信它必须在这里发生:github.com/dc-js/dc.js/blob/develop/src/scatter-plot.js#L79
-
感谢您的回答!我已经简要地查看了源代码,我的 js 技能在这里还不够。我可以看到有一个 disableTransitions 开关,但它会阻止所有动画,这使得情节略显粗糙。对于我当前的项目,禁用数据点移动并保留所有其他动画就足够了。知道如何修补 dc 来获得这个吗?
-
我不确定,但理论上从 d3.js 的角度来看,
.data(_chart.data());会变成.data(_chart.data(), function(d) { return d.something_unique_per_data_point });。我认为您可以访问该函数中的组键,因此您可以使用它。我建议在 dc.js 存储库中打开问题并参考此讨论。 -
.transitionDuration(0)仅在散点图上? -
我同意@Ethan,数据确实应该使用键函数绑定,至少是可选的。有一些关于它的讨论in this ticket,所以我认为没有必要开新票。 (不过,拉取请求会很棒。)
标签: dc.js crossfilter