关于图:可视化 DAG

Visualizing a DAG

我有一个大的有向无环图,我想在位图图像中进行可视化。

理想情况下,我希望所有根节点都位于图像顶部,所有叶节点都位于底部,即图形边缘都指向下方。

是否有一种很好的算法可以计算出满足这些约束的所有节点的坐标并产生良好的可视化效果?


我建议你使用 Gephi。

这个软件可以做所有你想做的事情,尤其是图形布局!


查看 Graphviz 软件集合。它包含几个渲染图形的程序。

最简单的方法是以 Graphviz 的一种文本格式将图形写入磁盘。然后执行其中一个渲染程序,并将生成的图像加载到您的应用程序中。


贝叶斯网络也有类似的要求。您可能会寻找贝叶斯网络的算法。例如,这篇论文可能会有所帮助。


如果图表相当简单,那么位图会很好地为您服务。但是,对于非常密集的图形,您将需要矢量图形,例如支持以更友好的方式放大和缩小精细细节的 SVG 文件。更好的是使用专门用于导航图形的交互式工具,例如上面提到的 gephi 或 yED

如果您尝试可视化软件依赖关系图,我发现的最佳导航工具是 Visual Studio 中的 DGML 工具。他们使用了一个非常强大的 Sugiyama 树布局,可以很好地使图形流具有方向性。它们具有强大的交互功能,这些边缘跳跃链接是没有的。您还可以组织子图并将它们折叠起来等。

维基百科中涵盖了几种图形描述语言,可以查看
https://en.wikipedia.org/wiki/Category:Graph_description_languages。如果您有大量 RAM,则 DGML 工具可以非常愉快地渲染,并使图形的交互和探索非常直观。

这里有一个不错的布局技术概述,特别是来自 Kozo Sugiyama 的 #2 分层图形绘制。


您可能对分层图形绘制(也称为"分层图形绘制"或"杉山式图形绘制")感兴趣。该算法太长,无法在此处描述,但 Google 搜索提供了许多可靠的解释。


你可以试试我写的这个 Go 包:https://github.com/h8liu/e8tools/tree/master/dagvis

一个例子:http://lonnie.io/gostd/dagvis/