【发布时间】:2013-09-10 18:05:39
【问题描述】:
我一直在使用 D3 中内置的力导向算法进行网络拓扑可视化。一切都运行良好,但在一个重要细节上遇到了麻烦......对于具有不同数量节点的图形,我似乎无法以理想的方式布局图形。理想情况下,我的意思是节点与每个节点之间的间隔很好(没有重叠),节点集群在任何有意义的地方。我一直在尝试通过调整力布局的“电荷”和“重力”属性来做到这一点,但无论我尝试什么,它似乎总是适用于一种情况(即大量节点),但不是对于另一种情况(即少量节点)。例如,如果我的布局适用于大图,那么当我使用相同的电荷/重力公式查看小图时,会有一些节点远离其他节点。这是我根据另一个 SO 问题post 使用的公式示例:
var k = Math.sqrt(json.nodes.length / (dim.w * dim.h));
var charge = -10 / k;
var gravity = 100 * k;
这适用于具有 14 个节点的图形,但如果我尝试对具有 5 个节点的图形进行相同操作,则其中一些节点完全不在屏幕上。请注意,用于计算“k”的宽度/高度在这两种情况下没有变化。现在也许我不应该根据图形可见区域的宽度/高度来拥有这些属性。老实说,这不是一个要求。我不需要图形来渲染和适应图形的视口。我只需要合理地布置图表,所以如果其中一些可能在可见区域之外,特别是在大图表中,那很好。我也尝试了以下方法并取得了一些成功,但我仍然发现节点的渲染距离小图的其余部分太远:
var charge = -1 * Math.pow(json.nodes.length, 3);
var gravity = 1 / json.nodes.length;
有人可以帮我解决这个问题吗?将不胜感激,因为我感觉有点卡在这台自动取款机上。
【问题讨论】:
-
有人吗?请帮忙。 :)
-
强制布局对于这项任务来说并不是很理想。除了电荷/重力属性之外,您还可以尝试
linkDistance,甚至可以添加“幻像”链接,即那些未绘制但会影响节点定位方式的链接。 -
我已经在使用链接距离了,尽管我发现它对图表的布局没有太大的影响。为此目的,电荷/重力似乎更重要。为什么说力布局不适合网络拓扑?老实说,我认为它比任何其他图算法更适合网络。还有其他建议吗?
-
它不是特别适合,因为只要满足力约束,它就不会努力使布局“漂亮”。我对 Javascript 没有任何其他建议。
标签: javascript graph d3.js force-layout