为什么设置rankdir=LR会使节点从上到下排序?

问题描述 投票:0回答:1

在几个 hacky/复制粘贴 graphviz 图之后,我正在尝试认真理解点语言,我有一个非常基本的问题。 以下点码:

digraph G
{
    subgraph cluster_obj
    {
        A [label="A"]
        B [label="B"]
    }
} 

...呈现如下:

我从graphviz文档中了解到,

rankdir=LR
仅在图形级别使用,旨在从左到右排列图形(我假设这意味着从左排序子图)向右。

那么,为什么在上面的简单图中添加

rankdir=LR
会导致子图中的节点从上到下排列?

digraph G
{
    rankdir=LR
    subgraph cluster_obj
    {
        A [label="A"]
        B [label="B"]
    }
} 

我一直在阅读 graphviz.org 官方文档、各种 Stack Overflow 文章以及网络搜索结果中有关 graphviz/dot 语言的内容,但我还没有形成关于如何创建和安排的全面工作知识图表将。这个问题的灵感来自this Stack Overflow答案,它似乎隐含地依赖于

rankdir=LR
来实现其节点
2
3
的所需安排(这对OP的问题至关重要)——但在那个答案中,正如本问题中的示例所示,我没有看到一种模式可以揭示节点和子图从左到右与从上到下排列的时间和原因。

graphviz dot
1个回答
0
投票

好问题。您认为rankdir 的目的是为了

ordering subgraphs left-to-right
的假设是不正确的。 Rankdir 指定ranking 方向。 (抱歉循环定义,请继续阅读)
这里的关键概念是 rank - 将节点放入行(或列,如果 rankdir=LRRL)。除了一两个特殊情况外,排名都是基于edges进行的。 head 节点的排名高于 tail 节点。考虑一个树结构图 - tailhead 将处于不同的等级。
您的示例没有边(完全合法),因此所有节点都放置在同一等级上。
有关更深入的信息,请参阅https://graphviz.org/pdf/dotguide.pdf

附注请注意,ranking仅适用于dot布局引擎。其他 Graphviz 引擎基于其他模型工作。

© www.soinside.com 2019 - 2024. All rights reserved.