【问题标题】:I want to create a data-driven network, I'm trying to use d3我想创建一个数据驱动的网络,我正在尝试使用 d3
【发布时间】:2018-07-07 23:46:01
【问题描述】:

这个问题与避免项目在网络图中重叠有关。

在jsFiddle中:http://jsfiddle.net/fvila/fk8ata88/

var forceLayout = d3.layout.force()  
    .size([w, h])  
    .nodes(nodes)  
    .links(edges)  
    .linkDistance([200])  
    // avoid entanglement: most central nodes are most connected  
    .charge(function(d) {  
    return -200 + d.weight * -400  
    })  

这行得通,但是我不明白:

  • 为什么有些项目最终会重叠,当它们都有重负时 收费?
  • 我怎样才能避免一开始的争吵?稍微动一动很好,但这太过分了。

【问题讨论】:

    标签: d3.js diagram force-layout


    【解决方案1】:

    这是因为您只使用算法为可视化输出的 x 坐标,并通过用硬编码的“级别”值覆盖它们来完全忽略 y 坐标。

    这意味着该算法确实(大部分时间)产生了不重叠的结果,但是您的代码通过简单地以节点重叠的方式修改 y 坐标来引入重叠。

    如果您用简单的d.y 替换yOut(d) 部分,您将看到实际(内部)结果并且节点不会重叠。但是你没有得到可视化的关卡。

    这种产生分层布局(又名 Sugiyama 布局)的策略不是很聪明,而且总是会产生不好的结果,除非你非常非常幸运。

    相反,您应该寻找可以正确处理这种情况的分层布局的实现。如果您需要坚持使用 d3,您可以尝试(几乎没有维护的 AFAIK)dagre layout。如果您想拥有更多功能并获得更好的结果,请查看hierarchic layout in yFiles for HTML

    披露:我为创造后者(商业)产品的公司工作,但我在这里不代表我的雇主。我绝对相信后一种实现是可用于 JavaScript 的布局算法的最佳可用实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 2018-06-12
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多