2016-11-26 28 views
0

背景D3.js散點圖用套索 - 記錄選擇

我使用d3.js &套索,以允許用戶在散點圖選擇點。我希望他們能夠在相同的散點圖上一個接一個地選擇多個羣集。我發現瞭如何做到這一點就在這裏一個例子:http://bl.ocks.org/skokenes/511c5b658c405ad68941

問題

我想記錄點的每一個選擇,這樣我結束了一個數組,其中每個點有一個列表它屬於的集羣。例如,Dot1屬於簇[1,3,4]。

問題

什麼是存儲這些選擇的最佳方式?

回答

1

什麼是最好的方式來存儲這些選擇?

那麼,這是太「基於意見」S.O.但是,我將分享一個非常粗略的解決方案,其中不是爲每個點創建它所屬的羣集列表,而是使用相應的點創建羣集列表。幾乎是對面的你問什麼,而是你可以輕鬆地修改生成的數組(用點每個選擇的陣列)來創建所需的記錄(一個數組的選擇每個點)。

的第一步是限定所述陣列之外lasso_end

var clusters = []; 

然後,內部lasso_end,我們得到選定點的列表:

var selected = lasso.items().filter(function(d){ 
    return d.selected===true 
}); 

var selectedDots = selected[0].map(d=>d.id); 

在這裏,我通過ID映射。然後,我們推數組clusters

clusters.push(selectedDots); 

每當用戶選擇一些點,cluster變得更大。因此,在第一時間,就可以得到這樣的事情:

var clusters = [["dot_62","dot_68","dot_87","dot_119"]]; 

而且,在第二次:

var clusters = [["dot_62","dot_68","dot_87","dot_119"], 
    ["dot_53","dot_57","dot_80","dot_81","dot_93"]]; 

這裏是一個plunker,選擇點和檢查控制檯:https://plnkr.co/edit/qiZ6bkgZhoSn3XfJW2l7?p=preview

PS:正如我之前所說的,這是一個非常粗略的解決方案:如果用戶只需單擊圖表中的任何位置,clusters將會有一個新的空數組。所以,你必須修改它以達到你的目的。

+0

非常優雅的解決方案,完美適用於我所需要的。非常感謝! – Sekoul