По-видимому, в GraphViz нет поддерживаемых решений, которые бы соответствовали требуемым критериям для меток ребер. Моя работа состоит в том, чтобы разделить края между двумя узлами и вставить другой узел, содержащий текст метки края. Новый узел разработан так, чтобы отличать guish от обычных узлов.
Алгоритм компоновки GraphViz хорошо справляется с разделением узлов и не позволяет краям перекрывать узлы.
Обновляя контрольный пример с помощью этого обходного пути, у меня есть следующий файл точек:
digraph G {
splines=ortho;
rankdir=LR;
AA1 [label="a very long label", shape="box", style = "filled", fillcolor = "#E6E6E6", color = "#FFFFFF" ]
AA2 [label="a very long label", shape="box", style = "filled", fillcolor = "#E6E6E6", color = "#FFFFFF" ]
AB1 [label="a long label", shape="box", style = "filled", fillcolor = "#E6E6E6", color = "#FFFFFF" ]
AC1 [label="a long label", shape="box", style = "filled", fillcolor = "#E6E6E6", color = "#FFFFFF" ]
AD1 [label="a long label", shape="box", style = "filled", fillcolor = "#E6E6E6", color = "#FFFFFF" ]
A -> AA1 [arrowhead = "none" ];
AA1 -> A
A -> AA2 [arrowhead = "none" ];
AA2 -> A
A -> AB1 [arrowhead = "none" ];
AB1 -> B
A -> AC1 [arrowhead = "none" ];
AC1 -> C
A -> AD1 [arrowhead = "none" ];
AD1 -> D
}
, который производит это