GraphViz, группировка одинаковых ребер

digraph G {
  a -> b [ label = "foo" ];
  a -> b [ label = "bar" ];
}

Это создаст два ребра между узлами «a» и «b». Есть ли способ иметь только одно ребро (сгруппировать их)?


person name    schedule 24.02.2010    source источник
comment
Вы хотите одно ребро с двумя этикетками? Другими словами, что вы хотите, чтобы отличалось от простого наличия одного оператора, указывающего одно ребро между a и b?   -  person datageist    schedule 24.02.2010
comment
Интересно, есть ли способ сделать край толще, если его дубликатов больше.   -  person Geremia    schedule 19.03.2016


Ответы (2)


Я думаю, что это действительно зависит от того, каким будет ваш желаемый результат. Одна из возможностей:

digraph G {
   graph [ splines = false ]
   a -> b [ label = "foo" ];
   a -> b [ label = "bar" ];
 }

Там, где не используются сплайны, ребра рисуются с сегментами прямых линий, поэтому повторяющиеся ребра не будут различимы визуально.

В вашем идеальном выводе, как бы выглядело одно ребро, поскольку для него должны быть две разные метки?

person RTBarnard    schedule 24.02.2010
comment
Спасибо за ответ. Его действительно визуально не отличить. С метками я хотел бы их объединить. Мне, вероятно, придется снова писать файл с изменениями. - person name; 24.02.2010
comment
Вы правы. Ваша цель выходит за рамки возможностей обработки узлов/ребер графвиза и требует какой-то предварительной обработки для объединения дубликатов в форму, которую вы ищете. Конечно, с меньшими графиками, как в примере, вы можете как бы подделать их с помощью опции сплайнов. - person RTBarnard; 24.02.2010

Ключевое слово «strict» может вам помочь.

strict digraph G {
  a -> b [ label = "foo" ];
  a -> b [ label = "bar" ];
}

Это объединит края. Но я считаю, что он будет применять только первый ярлык.

person Jason    schedule 21.07.2010
comment
Работает, но будет применяться последняя метка. - person Welgriv; 07.05.2021