我尝试用这个DOT输入文件创建一个简单的循环图:
digraph {
rankdir=LR;
node0 [label = "0", group="bottom"];
node1 [label = "1", group="bottom"];
node2 [label = "2", group="top"];
node3 [label = "3", group="top"];
node0 -> node1;
node1 -> node0;
node2 -> node3;
node3 -> node2;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好,它导致:

但现在我希望将以下关系添加到节点:
node0 -> node3;
node3 -> node0;
node2 -> node1;
node1 -> node2;
Run Code Online (Sandbox Code Playgroud)
而且令人惊讶的是,这会导致:

如果我删除rankdir=LR;,我会得到一个垂直图.我需要一个简单的循环图,因为空间中的节点放置与它们的相关性有关.所以新连接应该是垂直的,节点应该形成一个正方形.这有可能实现使用DOT吗?
这也许可以使用点来实现的; 我已经好几年没玩了,所以我有点生疏了。但是,如果您使用 dot 的姊妹程序 circo,您的数据将呈现为一个整齐的菱形,它应该是正常 GraphViz 安装的一部分。
使用点的一种方法是将节点排序为两行:
digraph {
0 -> {1 3}
1 -> {0 2}
2 -> {3 1}
3 -> {2 0}
// Put specified nodes on same row:
{rank=same; 0; 1}
{rank=same; 2; 3}
}
Run Code Online (Sandbox Code Playgroud)