69

为了简化问题,我有一个图,其中包含 2D 平面上的节点和边。

我想要做的是单击一个按钮,它使自动布局图形看起来很干净。我的意思是边的最小交叉,节点之间的良好空间,甚至可能代表图形比例(加权边)。

我知道这对于什么是干净的图形完全是主观的,但是有没有人知道从算法开始,而不是重新发明轮子?

谢谢。

4

5 回答 5

84

您会发现http://graphdrawing.org/布朗大学教授Roberto Tamassia教程非常有帮助。

我很喜欢Spring Embedder之类的 Force-Directed Techniques(教程中的第 66-72 页) 。

您假设任何两个相邻节点之间存在弹簧或其他力,并让自然(模拟)完成工作:)

于 2011-02-17T15:00:51.970 回答
25

我建议你看看graphviz。该dot程序可以采用图形规范并为您生成网络图像,有点“干净”。我已经链接到“理论”页面,如果您对理论背景感兴趣,它会为您提供一些可能相关的链接。如果您只是想要解决您面临的布局问题,那么库和工具本身就足够成熟了。

于 2011-02-17T11:46:45.873 回答
4

如果你想要 Java 中的布局,还有JGraph (我在这个项目上工作)。

于 2011-02-17T12:01:35.947 回答
4

我会说是 Noufal Ibrahim,但您也可以更准确地查看graphviz项目的 C API。它包括一个用于构建包含所有节点和边的图形的库( libgraph.pdf ),以及一个用于布局图形的库(libgvc.pdf (只需计算每个节点的位置),因此您可以在自己的 UI 中显示它例如。

于 2011-02-17T15:56:23.033 回答
3

一个很好的视觉指南最流行的布局实际上看起来如何:点击链接

于 2016-07-18T12:12:01.797 回答