我使用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