2016-11-26 179 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