Простое линейное расположение в графвизе - PullRequest
6 голосов
/ 07 апреля 2011

Я хочу создать такие простые линейные схемы, как это:

graph I'd love to recreate with graphviz

Я думаю, что делаю это слишком сложно.Я пробовал просто жестко кодировать позиции, но это немного сложнее, потому что я хочу скругленные края.

Мне не особенно важно, если края выше или ниже, но указание, что было бы неплохо.

1 Ответ

8 голосов
/ 08 апреля 2011

Это одна из тех вещей, которые могут показаться простыми в графике, но на самом деле это не так.

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 output

Как только вы начнете использовать северный и южный порты, 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;

an other graphviz output

Если у кого-то есть лучшее приближение, пожалуйста, опубликуйте его, мне будет интересно.

...