2012-03-26 7 views
4

Я хочу, чтобы генерировать следующий график в Graphviz:Набивки между кластером границами и узлами при использовании Graphviz и Neato

Desired layout

По причинам here, это:

digraph 
{ 
    layout=dot; 
    rankdir="LR"; 
    overlap = true; 
    node[shape=record, height="0.4", width="0.4"]; 
    edge[dir=none]; 

    A; B; C; D; E; F; G; H; I; 

    A -> B -> C; 
    D -> E -> F; 
    G -> H -> I; 
    edge[constraint=false]; 
    A -> D -> G; 

    subgraph clusterX 
    { 
     label="Cluster 1"; 
     A; B; 
    } 

    subgraph clusterY 
    { 
     label="Cluster 2"; 
     E; F; H; I; 
    } 

} 

производит это:

Not desired layout

После some careful tweaking of the order of appearance of nodes:

F; E; I; H; D; G; A; B; C; 

я получить правильный результат.

Хотя это работает, я хотел бы более непосредственный контроль над размещением узлов, поэтому я попытался переключиться на Neato, так что я могу заставить местоположение узла с помощью Pos:

graph g 
{ 
    layout=neato; 
    node[shape=record, height="0.4", width="0.4"]; 
    edge[dir=none]; 

    A [pos="1,3!"]; 
    B [pos="2,3!"]; 
    C [pos="3,3!"]; 
    D [pos="1,2!"]; 
    E [pos="2,2!"]; 
    F [pos="3,2!"]; 
    G [pos="1,1!"]; 
    H [pos="2,1!"]; 
    I [pos="3,1!"]; 

    A -- B -- C; 
    D -- E -- F; 
    G -- H -- I; 
    A -- D -- G; 

    subgraph clusterX 
    { 
     label="Cluster 1"; 
     A; 
     B; 
    } 

    subgraph clusterY 
    { 
     label="Cluster 2"; 
     E; F; H; I; 
    } 
} 

Это дает следующий результат:

enter image description here

Как я могу получить Neato добавить отступы между кластерными границами и узлами в кластере (таким же образом, что точка делает)?

ответ

4

Ненавижу быть сторонником pooper, но я не думаю, что подход neato-fixed-position-and-clusters будет успешным.

Поддержка кластеров зависит от расположения двигателя - not all engines support it to the same degree:

Обратите внимание, что для хороших и плохих, кассетные подграфы не являются частью языка DOT , но исключительно синтаксический конвенции придерживалась некоторыми из механизмы компоновки.

Neato does not seem to be a part of the engines supporting clusters, и в то время как fdp делает поддержку Neato как макет, он делает not support fixed positions.

В приведенных выше связанных записях форума ERG предлагает в какой-то момент использовать сценарий gvpr для достижения этого - возможно, не решение, которое вы имели в виду.

Кстати, график не должен быть ориентированным графом, я получаю предупреждения и заменяю все -> на --.

+0

Спасибо @marapet. Похоже, мне придется изменить свой подход здесь. Я ценю информацию и ссылки, которые вы предоставили. Я обновил вопрос, чтобы удалить направленные ребра. –