【发布时间】:2012-08-13 23:33:47
【问题描述】:
所以我已经有一个页面绘制了一个力导向图,就像here 显示的那样。
而且效果很好。我正在使用来自here 的 JS,并进行了一些调整以更好地分散节点。
这些或多或少是唯一的区别:
d3.json("force.json", function(json) {
var force = d3.layout.force()
.gravity(0.1)
.charge(-2000)
.linkDistance(1)
.linkStrength(0.1)
.nodes(json.nodes)
.links(json.links)
.size([w, h])
.start();
降低链接强度似乎会使链接更像弹簧,因此它类似于经常使用的Fruchterman & Reingold 技术。这工作得相当好,但仅适用于相当小的图形。对于较大的图表,交叉点的数量只会增加 - 正如人们所期望的那样,但它所采用的解决方案通常远非最佳。我不是在寻找获得最佳解决方案的方法,我知道这非常困难。我只是希望它有一些粗略的添加,试图将线条和节点分开。
有没有办法在链接之间以及节点之间添加斥力?我不熟悉 D3 力的工作方式,我似乎找不到任何东西说这是可能的......
【问题讨论】:
-
你有想过这个吗?
-
很遗憾没有。不过我没有深入研究 js,因为我不熟悉该语言。我确实尝试过使用实际的 Fruchterman & Reingold 技术,但结果仍然不如我手动移动节点那么好。
-
@pocketfullofcheese - 我实际上在使用 networkX(一个 python 模块)和 matplotlib,但是他们的网站上有一个 D3.js 示例,看起来相当不错,这就是我尝试它的原因。
-
可视化大图是困难...我知道这不能解决问题,但也许你会发现我的 networkX 端口有帮助:felix-kling.de/JSNetworkX。它也使用 d3,让您可以轻松放大和缩小图表的某些部分,从而更容易检查。
-
@FelixKling 除了放大和缩小之外,这是否会为两者添加任何功能?并不是说我的图表是大,更多的是它们之间的联系非常紧密——它们大约有 40 个节点
标签: javascript graph d3.js force-layout