d3 - 汇总数据给出“步骤”值

时间:2015-02-23 20:23:58

标签: d3.js crossfilter

我正在尝试将语义缩放和数据聚合考虑到一些渲染/平移SVG的问题。

因此,每当我的视图范围(x域)变得太大而其数据得到太多元素时,我会绘制一些"合并/聚合"代表我的原始数据的新数据。

因此,减少数据的一种方法是根据"步骤"聚合它。值。

假设我有一个x.domain([1,1000])和一个包含1000个元素的过滤数据(从位置1到1000)。我将这1000个位置/元素设置为我要渲染的固定元素数量。

如果用户缩小到新的x.domain([1,2000]],而不是获取2000个数据元素,我想以某种方式聚合(平均值或中位数)我的数据。在这种情况下,我的步骤为2(即域大小/固定元素数量或2000/1000 = 2)

一旦使用SVG太多渲染元素很慢并且不是一件好事,这似乎是一件合理的事情。它很容易变大。

所以我的想法是(在这种情况下):逐步聚合值。

我们说我有这个数据对象:

  

{position:1,value:8},       {position:2,value:10},       {position:3,value:10},       {position:4,value:12},       {position:5,value:14},       {位置:6,价值:16},       ...

生成的agreggated对象将是:

  

{position:1 + 2 / step,value:8 + 10 / step},   {位置:3 + 4 /步骤,值:10 + 12 /步骤},   {position:5 + 6 / step,value:14 + 16 / step},   ...

这样我总会保留1000个要渲染的元素。一旦我的采样率= 1,它仍然可以很好地了解数据。

我的问题是:

以这种方式汇总数据的最佳解决方案是什么? (一旦它没有被特定领域(即月份,国家等)聚集在一起)。

d3.nest()会成为正确的选择吗?那么crossfilter呢?

非常感谢任何想法和/或帮助。

干杯。, d

1 个答案:

答案 0 :(得分:1)

虽然 crossfilter 绝对是一个不错的选择,但我更喜欢轻量级库simplify.js,特别是如果您处理的是折线图,或者您的数据包含的极端点可能会被您的< em> step 功能。 simplify.js 会减少您的数据,使图表看起来与使用所有数据点创建的图表类似。

相关问题