2012-11-12 56 views
9

我一直在努力這一段時間,似乎無法找到一個直接的答案。我正在使用graphviz中的複合子圖形,似乎無法找到正確的設置組合來強制兩個子圖彼此對齊。如何讓graphviz生成固定大小的子圖?

封閉式是一個簡單的例子來說明該問題...

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 ] 
} 

這產生與底部子比頂部子圖顯著較寬的輸出。

enter image description here

我真正想要的是確保頂部和底部都總是一樣寬。另外,如果有太多的節點適合可用寬度,則會生成額外的節點行。

回答

2

一個可能的(壞但工作)的解決方案將是使用不可見的節點和設置寬度。 考慮以下幾點:

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

無形節點(NodeAI0-NodeAI2)乘坐空間。 fixedsize = true,width = 1.65使最後一個正好1.65英寸。

另一個,更好的解決方案是還通過將像設置相關的較長的節點特異性(以避免必須尋找正確的值):化合物=真部分之後

node [fixedsize=true,width=0.75]