图形自动布局算法

Posted

技术标签:

【中文标题】图形自动布局算法【英文标题】:Graph auto-layout algorithm 【发布时间】:2011-06-29 01:03:36 【问题描述】:

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

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

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

谢谢。

【问题讨论】:

【参考方案1】:

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

【讨论】:

问题是关于图形布局的算法,而不是应用程序。 这就是为什么我在那个页面上特别提到了理论链接。 答案没有明确提到理论链接。这更像是“如果您对理论感兴趣”。最好参考理论链接和“如果您对应用程序感兴趣”。 很公平。我将 OP 理解为想要解决布局问题(而不是重新实现解决方案),并以此为基础(一个经过良好测试的生产质量“***”,他或她不必重新发明)。【参考方案2】:

您会发现 http://graphdrawing.org/ 和 this tutorial,由布朗大学教授 Roberto Tamassia 提供,非常有帮助。

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

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

【讨论】:

我认为问题是关于算法而不是框架。我不明白为什么不接受这个问题,这是唯一一个关于算法的问题。 可能是因为接受的答案指向 graphviz 文档的“理论”部分,该部分根据要求解决算法?不过,您链接的教程看起来很有用,所以对您获得的 +1 感到满意。 @digitig thnx。顺便说一句,我没有抱怨。别人做了! @xhg thnx!我在布朗大学编辑了指向 Roberto Tamassia 页面的链接。 提供的链接已失效“本教程”。请相应更新。【参考方案3】:

最流行的布局实际外观的良好视觉指南:关注link

【讨论】:

虽然这在理论上可以回答问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。【参考方案4】:

如果您想要 Java 中的布局,也可以使用 JGraph(我从事该项目)。

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于图形自动布局算法的主要内容,如果未能解决你的问题,请参考以下文章

为什么android studio会自动在图形布局编辑器中重新排序视图和元素

约束和自动布局背后的 IOS 算法

带有固定节点的 Javascript cytoscape.js 自动布局

如何为不同的屏幕尺寸创建具有自动布局的比例视图?

自动化装配车间(automated assemby shop)动态路径规划的混合算法——考虑车间布局的动态变化(dynamic layout)

使用自动布局来支持不同 iPhone 尺寸的问题(包括图表)