2013-03-03 2 views
18

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

Я нашел подобный запрос с поста Family tree layout with 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

Как я могу получить такую ​​визуализацию?

Редактировать: атрибут «сплайнов» кажется неработоспособным, как ожидалось ... Есть ли что-то, что я сделал не так?

ответ

23

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

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

Смежные вопросы