2012-11-12 10 views
9

Od pewnego czasu walczę z tym i nie mogę znaleźć prostej odpowiedzi. Pracuję nad złożonymi podgraphami w graphviz i nie mogę znaleźć odpowiedniej kombinacji ustawień, aby zmusić dwie podgramy do wzajemnego dopasowania.Jak uzyskać graphviz do generowania podgraphów o stałej wielkości?

Zamknięty prosty przykład, aby pokazać problem ...

digraph g { 
    compound=true; 

    subgraph cluster_top { 
    graph [color=black, label="Top", rank=min]; 

    nodeA; nodeB; nodeC 
    cluster_top_DUMMY [shape=point style=invis] 
    } 

    subgraph cluster_service { 
    graph [color=black, label="Bottom", rank=min]; 
    node1; node2; node3; node4; node5; extra_long_node 
    cluster_bottom_DUMMY [shape=point style=invis] 
    } 
    cluster_top_DUMMY -> cluster_bottom_DUMMY [ style=invis ] 
} 

Generuje wyjście z dnem podgrafu znacznie szerszym niż górna podgrafu.

enter image description here

Co ja naprawdę chcę to aby upewnić się, że górny i dolny są zawsze dokładnie tej samej szerokości. Ponadto, jeśli istnieje zbyt wiele węzłów, aby zmieścić się w dostępnej szerokości, wygenerowałoby to dodatkowe wiersze węzłów.

Odpowiedz

2

Możliwe (złe, ale działające) rozwiązanie polega na użyciu niewidocznych węzłów i ustawionej szerokości. Rozważmy następujący:

digraph g { 
    compound=true; 

    subgraph cluster_top { 
     graph [color=black, label="Top", rank=min]; 

     nodeAI0 [style=invisible] 
     nodeAI1 [style=invisible] 
     nodeAI2 [style=invisible,fixedsize=true,width=1.65] 
     nodeA; nodeB; nodeC 
     cluster_top_DUMMY [shape=point style=invis] 
    } 

    subgraph cluster_service { 
     graph [color=black, label="Bottom", rank=min]; 
     node1; node2; node3; node4; node5; extra_long_node 
     cluster_bottom_DUMMY [shape=point style=invis] 
    } 
    cluster_top_DUMMY -> cluster_bottom_DUMMY [ style=invis ] 
} 

enter image description here

Niewidzialne węzły (NodeAI0-NodeAI2) podejmuje przestrzeń. fixedsize = true, width = 1.65 sprawia, że ​​ostatni zajmuje dokładnie 1,65 cala.

Innym, lepszym rozwiązaniem byłoby również ustawić odpowiednie dłuższy węzeł specjalnie (w celu uniknięcia konieczności zaglądania do wartości prawidłowej) dodając coś takiego:

node [fixedsize=true,width=0.75] 

po części związek = true.

Powiązane problemy