8

我有一个从左到右排列的图表。但是,此图中的某些元素我希望相对于另一个节点进行定位。例如,如果我有这个图表:

digraph "Test" {
    rankdir = "LR"
    A -> B
    B -> C
    D -> B
    note -> B

    note [ shape="house" ]
};

它呈现如下:

正常 DOT 布局

但是,我希望“注释”节点始终直接位于它指向的节点下方,如下图(手动创建)图:

所需的 DOT 布局

我尝试过使用具有不同属性和摆弄属性的子图进行试验,rankdir但未能成功,因为我只在 DOT 上玩了几天。rankconstraint

4

2 回答 2

10

您可以在定义边之前枚举节点,然后通过将它们放在子图中将节点约束到与节点B相同的等级:note

digraph "Test" {
    rankdir = "LR"
    A;D;
    {rank=same; note; B;}
    C;

    A -> B
    B -> C
    D -> B
    B -> note [dir=back]

    note [ shape="house" ]
};

请注意,为了让 nodenote低于 node B,我必须反转边缘方向并添加dir=back以正确绘制箭头。

图形输出

于 2012-12-31T15:24:31.060 回答
3

移动节点的一般技术是创建不可见的边缘。在您的情况下,您可以创建一个边缘 from Ato note,将其标记为不可见,然后将边缘 from noteto标记B为非约束:

A -> note [style="invis"];
note -> B [constraint=false];
于 2012-12-31T07:55:20.230 回答