Это одна из тех вещей, которые могут показаться простыми в графике, но на самом деле это не так.
Graphviz сделан для того, чтобы минимизировать пересечение краев, поэтому он никогда не будет выкладывать края, как на этих рисунках. Это не то, что graphviz был сделан для .
Но я согласен, что было бы неплохо иметь возможность отключить граничную оптимизацию.
Вы можете создать что-то вроде этого:
rankdir=LR;
ranksep=0;
edge[style=invis];
node[shape=none, width=0.3, height=0, margin=0.02];
4->7->5->1->8->3->6->2;
edge[style=solid, constraint=false];
1:s->2:s->3:s->4:s->5:s->6:s->7:s->8:s
в результате
Как только вы начнете использовать северный и южный порты, graphviz попытается свести к минимуму пересечение ребер и провести некоторые ребра между узлами:
rankdir=LR;
ranksep=0.05;
edge[style=invis];
node[shape=none, width=0.3, height=0, fontsize=12, margin=0.02];
4->7->5->1->8->3->6->2;
edge[style=solid, weight=0];
1:n->2:n;
2:s->3:s->4:s;
4:n->5:n->6:n;
6:s->7:s;
7:n->8:n;
Если у кого-то есть лучшее приближение, пожалуйста, опубликуйте его, мне будет интересно.