Группировка выходных ребер из графвиза - PullRequest
2 голосов
/ 26 марта 2011

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

Возможно ли это или что-то подобное?

Ответы [ 2 ]

3 голосов
/ 26 марта 2011

Если вы не хотите указывать точки компаса, вы, вероятно, не захотите использовать HTML-подобные метки и порты .

Если вы 'Используя точку, вы все равно можете достичь чего-то подобного, используя атрибуты samehead и sametail.Из ссылки:

Края с одинаковым значением и одинаковым значением головки нацелены на одну и ту же точку на голове

Это позволяет группировать исходящие и входящие ребра.Вот простой пример:

digraph g{
    rankdir=LR;
    edge[samehead=h1, sametail=t1];
    a1->b->c1;
    a2->b->c2;
    edge[samehead=h2, sametail=t2];
    a3->b->c3;
    a4->b->c4;
}

graphviz output

Это, конечно, только группирование головок и хвостов ребер, и не гарантирует противоположных сторон для ребер разных типов.

0 голосов
/ 30 марта 2011

Мое текущее решение состоит в том, чтобы заменить мои старые узлы ребрами, создав таким образом два узла - по одному для каждого «порта» на графике. Я могу тогда мои края между этими "узлами порта". Например. вместо

node1 -> node2 [ sametail="b", samehead = "a" ]

пишу

node1_a -> node1_b [ dir=none, style=bold ]
node2_a -> node2_b [ dir=none, style=bold ]

node1_a -> node2_b // if I got head and tail right :-)

Хотя я не получаю коробки для своих «узлов», для моих целей это работает нормально.

...