强制某些连接水平
Force some connections to be horizontal
我正在使用 DOT 可视化一个 lisp AST,目前生成的图片是这样的:
目前,垂直线通常指定为parent -> child;
,倾斜线使用constraint
指定,如下所示:parent -> child [constraint=false];
.
这种方法可行,但我真正想要的是一种方法,使垂直连接保持不变,每个连接都将子项向下一行,但使水平连接实际上是水平的。这将创建看起来更像这样的东西:
这可能吗?
您可能把它弄得太复杂了 - 这个简单的基本代码就可以完成工作:
digraph so
{
# nodes
A[ label = "list" ];
B[ label = "ident: +" ];
C[ label = "literal: 1" ];
D[ label = "list" ];
E[ label = "ident: *" ];
F[ label = "literal: 3" ];
G[ label = "literal: 2" ];
# layout
{ rank = same; B C D }
{ rank = same; E F G }
# edges
A -> B;
B -> C -> D;
D -> E;
E -> F -> G;
}
用dot -T png -o so.png so.dot
编译得到你想要的:
我正在使用 DOT 可视化一个 lisp AST,目前生成的图片是这样的:
目前,垂直线通常指定为parent -> child;
,倾斜线使用constraint
指定,如下所示:parent -> child [constraint=false];
.
这种方法可行,但我真正想要的是一种方法,使垂直连接保持不变,每个连接都将子项向下一行,但使水平连接实际上是水平的。这将创建看起来更像这样的东西:
这可能吗?
您可能把它弄得太复杂了 - 这个简单的基本代码就可以完成工作:
digraph so
{
# nodes
A[ label = "list" ];
B[ label = "ident: +" ];
C[ label = "literal: 1" ];
D[ label = "list" ];
E[ label = "ident: *" ];
F[ label = "literal: 3" ];
G[ label = "literal: 2" ];
# layout
{ rank = same; B C D }
{ rank = same; E F G }
# edges
A -> B;
B -> C -> D;
D -> E;
E -> F -> G;
}
用dot -T png -o so.png so.dot
编译得到你想要的: