В ответ на обновленные ограничения одним из решений является закрепление A и X, а затем разметка графика вокруг них:
graph sample {
overlap=false;
splines=true;
tailclip=false;
headclip=false;
A [pin=true,pos="0,.2"]
X [pin=true,pos="0,.1"]
A -- I
A -- J
A -- B
A -- H
A -- E
A -- K
B -- D
B -- C
B -- L
C -- M
C -- N
C -- O
D -- P
D -- Q
E -- R
F -- A
G -- F
H -- J
A -- X
Я пробовал макет си neato, и fdp, и кажется, что получается график, который вы хотите.Естественно, если вы хотите наложить такое ограничение на произвольные пары узлов в одном графе, это решение может не сработать.
--- Более ранний ответ ---
Если выЯ не уверен, что есть способ решить проблему без изменения графика на этапе постобработки.Если neato - это просто удобное значение по умолчанию, тогда вы сможете решить свою проблему, используя вместо этого точку в качестве движка компоновки, и используя "rankdir = UD", плюс пару дополнительных ключей, если X нужно направить на юг.
В случае, если вам нужно только ограничение для применения к одному узлу X, тогда объединение X и A в кластере должно выполнить работу:
graph sample {
rankdir=UD
layout=dot
overlap=false
// .. as before
A -- X
subgraph clusterone {
style=invisible
A
X
}
}
Если вам нужно строгоЮжное ограничение применяется к произвольным дочерним элементам A, затем этот тип кластеризации с последующим приемом, описанным в:
Как заставить все узлы в одном столбце в Graphviz?
может добиться цели.Атрибут clusterrank=local
также может быть полезен в этом случае, но я не уверен.Надеюсь, это поможет.