2015-02-23 27 views
0

我正在嘗試將語義縮放和數據聚合考慮爲某些渲染/平移SVG問題。d3 - 給出「步驟」值的聚合數據

因此,只要我的視圖範圍(x域)變得太大,並且其數據得到太多元素,我會繪製一些代表我的原始視圖的「合併/聚合」的新數據。

因此,減少我的數據的一種方法是根據「步驟」值進行彙總。

比方說,我有一個x.domain([1,1000])和1000個元素(從位置1到1000)的過濾數據。我會將這1000個位置/元素設置爲我要顯示的元素的固定數量。

如果用戶縮小到一個新的x.domain([1,2000]],而不是獲得2000個數據元素,我想聚合(平均值或中值)我的數據。在這種情況下,我會有一個2的步驟(即域大小/固定元素的OR 2000/1000 = 2)

這似乎是一個合理的事情,一旦太多渲染元素很慢,而不是使用SVG的好事。它可以很容易地變大。

所以我的想法是(在這種情況下):按步驟彙總值。

比方說,我有此數據對象:

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

所得agreggated對象將是:

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

這樣我總是會保留1000個元素進行渲染。一旦我的採樣率= 1,它仍然能夠很好地理解數據。

我的問題是:

這將是最好的解決辦法彙總我的數據這種方式? (一旦它沒有被特定領域(即月,國家等)聚合)。

請問d3.nest()是否是正確的選擇?那麼crossfilter呢?

任何想法和/或幫助,高度讚賞。

乾杯, d

回答

1

雖然crossfilter絕對是一個不錯的選擇,我寧願一個輕量級庫simplify.js,特別是如果你正在處理線圖表或數據包含可能會被過濾的極值點你步驟功能。 簡化。js可以減少您的數據,從而使圖表看起來與使用所有數據點創建的圖表看起來相似。

+0

simplify.js似乎確實是一個很好的(和快速)庫。我想我想要控制它的邏輯,一旦我有幾種數據類型(其中一些數據類型的採樣率!= 1),所以我可以基於此控制和更改邏輯。問題是:我不知道如何使用crossfilter或d3.nest()來執行我需要的方式:/ – dmartinez 2015-02-23 23:38:49