我使用d3.js &套索,以允許用戶在散點圖選擇點。我希望他們能夠在相同的散點圖上一個接一個地選擇多個羣集。我發現瞭如何做到這一點就在這裏一個例子:http://bl.ocks.org/skokenes/511c5b658c405ad68941
問題
我想記錄點的每一個選擇,這樣我結束了一個數組,其中每個點有一個列表它屬於的集羣。例如,Dot1屬於簇[1,3,4]。
問題
什麼是存儲這些選擇的最佳方式?
我使用d3.js &套索,以允許用戶在散點圖選擇點。我希望他們能夠在相同的散點圖上一個接一個地選擇多個羣集。我發現瞭如何做到這一點就在這裏一個例子:http://bl.ocks.org/skokenes/511c5b658c405ad68941
問題
我想記錄點的每一個選擇,這樣我結束了一個數組,其中每個點有一個列表它屬於的集羣。例如,Dot1屬於簇[1,3,4]。
問題
什麼是存儲這些選擇的最佳方式?
什麼是最好的方式來存儲這些選擇?
那麼,這是太「基於意見」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
將會有一個新的空數組。所以,你必須修改它以達到你的目的。
非常優雅的解決方案,完美適用於我所需要的。非常感謝! – Sekoul