Graph D3.js强制布局:如何隔离节点组?

Graph D3.js强制布局:如何隔离节点组?,graph,d3.js,simulation,data-visualization,force-layout,Graph,D3.js,Simulation,Data Visualization,Force Layout,我想要达到的目标是什么? 我希望有一组节点,在一个树状结构中,每个根要么是主根,要么是另一棵树的叶子的后代 生成下面看到的内容很容易,但我真正希望看到的是围绕每个根的完整圆。但是,由于节点相互排斥,每个簇之间存在以下间隙。我假设解决方案包括忽略来自不同根的叶子之间的电荷引起的排斥 我的想法 在每个根周围设置某种半径,使其在半径以外的所有方向上排斥其他节点,从而使叶子在其中呈圆形 使用LinkDistance和LinkStrength以某种方式安排集群,使它们不会显著交互 这可能吗? 除了我

我想要达到的目标是什么?

我希望有一组节点,在一个树状结构中,每个根要么是主根,要么是另一棵树的叶子的后代

生成下面看到的内容很容易,但我真正希望看到的是围绕每个根的完整圆。但是,由于节点相互排斥,每个簇之间存在以下间隙。我假设解决方案包括忽略来自不同根的叶子之间的电荷引起的排斥

我的想法

  • 在每个根周围设置某种半径,使其在半径以外的所有方向上排斥其他节点,从而使叶子在其中呈圆形
  • 使用LinkDistance和LinkStrength以某种方式安排集群,使它们不会显著交互
这可能吗?

除了我模糊的想法,我真的不知道该怎么做

通过阅读D3文档,我发现与动态链接距离和链接强度方法不同,节点电荷操作似乎是通用的:

"All nodes are assumed to be infinitesimal points with equal charge and mass."

如果这句话是真的,你们中的一个能给我指引正确的方向吗?

我不确定你们会怎么做,但我发现了一个例子,集群内部只有电荷,节点不与不同的节点交互:

我想答案的开始可能是这个堆栈溢出问题,

要知道,使每个节点的电荷依赖于相同的属性是可能的。 用类似的东西试试看

   .charge(function(d) { console.log(d); //you'll see this brings up the nodes
   if (d.something == onething) { 
      return    -1300;} 
   else { 
      return -100; } 
    }) 

正如链接到答案中提到的,您几乎肯定必须尝试“摩擦”和“链接距离”。不要害怕尝试和错误——至少我已经断断续续地处理这类问题几个月了,还没有找到“通用”解决方案

拖动气泡以查看其作用