Graphviz点算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Graphviz点算法相关的知识,希望对你有一定的参考价值。

有关Graphviz Library中dot的算法是否有任何文档(完整的伪代码?)?

我只找到了一些部分伪代码文档。

答案

以下是一些参考资料。最完整的(缺少点源代码本身)可能是#2,文章“绘制有向图的技术”,由几个Graphiz贡献者自己编写。

(1) "Drawing graphs with dot"

Drawing graphs with dot中,dot的布局算法描述如下:

dot在四个主要阶段绘制图表。了解这一点有助于您了解dot所做的布局类型以及如何控制它们。点使用的布局过程依赖于图形是非循环的。因此,第一步是通过反转某些循环边缘的内部方向来破坏输入图中出现的任何循环。下一步将节点分配给离散的排名或级别。在从上到下的图形中,等级确定Y坐标。跨越多个等级的边缘被分成“虚拟”节点和单位长度边的链。第三步命令级别内的节点以避免交叉。第四步设置节点的X坐标以保持边缘短,最后一步设置边缘样条。基于Warfield [War77],Carpano [Car80]和Sugiyama [STT81]的工作,这与大多数层次图绘制程序的通用方法相同。我们将读者推荐给[GKNV93]以获得对dot算法的详尽解释

该段引用的论文如下:

  • [Car80] M. Carpano。自动显示用于计算机辅助决策分析的分层图。 IEEE软件工程学报,SE-12(4):538 - 546,1980年4月。(显然可以购买here。)
  • [GKNV93] Emden R. Gansner,Eleftherios Koutsofios,Stephen C. North和Kiem-Phong Vo。一种绘制有向图的技术。 IEEE Trans。 Sofware Eng。,19(3):214-230,1993年5月。(可在Graphviz.org网站上找到here。)
  • [STT81] K.Sugiyama,S。Tagawa和M. Toda。分层系统结构的视觉理解方法。 IEEE Transactions on Systems,Man,and Cyber​​netics,SMC-11(2):109-125,1981年2月。(显然可以购买here。)
  • [War77] John Warfield。交叉理论与层次映射。 IEEE Transactions on Systems,Man,and Cyber​​netics,SMC-7(7):505 - 523,1977年7月。(显然可以购买here。)

(2) "A Technique for Drawing Directed Graphs"

dot的算法在1993年的IEEE Transactions on Software Engineering期刊上发表的论文"A Technique for Drawing Directed Graphs"中有详细描述(可在Graphviz.org网站上免费获得)。这是上面引用的“[GKNV93]”来源。

摘要,它的价值在于:

我们描述了用于绘制有向图的四遍算法。第一遍使用网络单纯形算法找到最佳秩分配。第二遍通过迭代启发式设置排名内的顶点顺序,该迭代启发式结合了新的权重函数和局部转置以减少交叉。第三遍通过构造和排列辅助图来找到节点的最佳坐标。第四遍使样条线绘制边缘。该算法可以很好地绘制图纸并快速运行。

(3) "Using Graphviz as a Library"

qazxsw poi在3.1节中提供了每种布局引擎算法的摘要。点的部分描述是这样的:

如果可能,点算法产生关于边缘方向的图的排序布局。它特别适合显示层次结构或有向非循环图。基本布局方案归功于Sugiyama等人[STT81]点使用的特定算法遵循Gansner等人[GKNV93]描述的步骤。

点布局中的步骤是:1)初始化2)秩3)mincross 4)位置5)相同的端口6)样条7)复合边界

在初始化之后,算法使用整数程序将每个节点分配给离散等级(等级)以最小化(离散)边长度的总和。下一步(mincross)重新排列等级内的节点以减少边缘交叉。接下来是实际坐标到节点的分配(位置),使用另一个整数程序来压缩图形并拉直边缘。此时,所有节点都将在coord属性中设置位置。另外,设置所有簇的边界框bb属性。

“[GKNV93]”参考是如上所述的“绘制有向图的技术”。

“[STT81]”参考如上所述的“用于视觉理解分层系统结构的方法”。

(4) You might also be interested in:

以上是关于Graphviz点算法的主要内容,如果未能解决你的问题,请参考以下文章

利用Graphviz绘制逻辑关系依赖图

如何垂直而不是水平地制作点(graphviz)布局未连接的节点?

带有点/graphviz 的框图布局

算法图绘制工具Graphviz

graphviz 错误:点:无法打开 hello.dot(OSX El Capitan)

从 Graphviz 中的点图中删除不必要的负空间