Подтвердить что ты не робот

Принуждение ортогональных (вертикальных или горизонтальных) ребер с точками

Я хотел бы заставить точку отображать только вертикальные или горизонтальные ребра между узлами.

Я нашел аналогичный запрос с тегом Family Tree layout с Dot/GraphViz, но я не имею дело с деревьями, поэтому я надеюсь, что есть решение без вставка дополнительных узлов...

Если я построю следующий график:

digraph G {

    splines=ortho

    A [ shape=box ]
    B [ shape=box ]
    C [ shape=box ]
    D [ shape=box ]

    A -> B
    A -> C

    B -> D
    C -> D

}

То, что я получаю, это:

enter image description here

Но мне нужен граф вроде этого:

enter image description here

Как я могу получить такой рендеринг?

Изменить: атрибут "сплайнов" кажется неработоспособным, как ожидалось... Что-то я сделал не так?

4b9b3361

Ответ 1

Ваш синтаксис кажется правильным. Когда я запускаю его, я получаю ортогональную маршрутизацию (сортировки):

enter image description here

Какая версия у вас есть?

Я спрашиваю, потому что ортогональная кросс-маршрутизация доступна только в версиях Graphviz с 28 сентября 2010 г. и новее. Не все системы имеют более поздние версии. В моей системе я должен был download и вручную установить Graphviz, чтобы получить версию выше версии 2.26.3 (начиная с 26 января 2010 г.).

Предполагая, что ваш фактический график содержит более 4 узлов, если вы хотите, чтобы линии имели изгиб, и вы не хотите добавлять дополнительные (невидимые) узлы, вы должны попробовать поиграть с графы nodesep. См. Код и изображение ниже.

digraph G {

    graph [splines=ortho, nodesep=1]
    node [shape=record]

    A -> {B, C} -> D
}

enter image description here