我有一张从左到右排列的图表。但是,这个图的某些元素我想要相对于另一个节点定位。例如,如果我有这个图:
digraph "Test" {
rankdir = "LR"
A -> B
B -> C
D -> B
note -> B
note [ shape="house" ]
};
它呈现如下:
但是,我希望“note”节点始终直接位于它所指向的节点下面,就像这个(手动创建的)图形一样:
我尝试使用不同rankdir
的子图并尝试使用rank
和constraint
属性进行试验,但是我没有成功实现此功能,因为我只是几天一直在玩DOT。
答案 0 :(得分:5)
以下是您可以执行的操作:在定义边之前枚举节点,并将约束节点A
置于与节点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" ]
};
请注意,为了让节点note
位于节点A
下方,我必须反转边缘方向并添加dir=back
才能正确绘制箭头。
答案 1 :(得分:3)
移动节点的一般技术是创建不可见边。在您的情况下,您可以创建从A
到note
的边缘,将其标记为不可见,然后将边缘从note
标记为B
作为非约束:
A -> note [style="invis"];
note -> B [constraint=false];