2016-09-06 9 views
4

GraphVizで一緒に描画したいいくつかの関連するサブグラフがあります。私は、単純なノードを描くと、それは非常にきれいに見える:GraphVizのクラスタースクイーズノード

enter image description here

出典:関連しているいくつかのサブグラフ全体で同じレベルのノードとして

digraph { 
    rankdir=LR; 

    A1 -> A21; 
    A1 -> A22; 
    A1 -> A23; 
    A1 -> A24; 

    B1 -> B21; 
    B1 -> B22; 
    B1 -> B23; 
    B1 -> B24; 

    A21 -> A31; 
    A22 -> A31; 
    A23 -> A31; 

    A23 -> A32; 

    B21 -> B31; 

    B21 -> B32; 
    B22 -> B32; 

    B21 -> B33; 
    B23 -> B33; 
} 

、私はそれらをグループにしたいとラベルを付けてください。 私はクラスタを使用して、それを実行しようとしましたが、それは「絞る」ノード:

enter image description here

出典:

digraph { 
    rankdir=LR; 

    subgraph cluster_level1 { 
    label = "Level 1"; 
    style=filled; 
    color=lightgrey; 

    A1; 
    B1; 
    } 

    subgraph cluster_level2 { 
    label = "Level 2"; 
    style=filled; 
    color=lightgrey; 

    A21; 
    A22; 
    A23; 
    A24; 

    B21; 
    B22; 
    B23; 
    B24; 
    } 

    subgraph cluster_level3 { 
    label = "Level 3"; 
    style=filled; 
    color=lightgrey; 

    A31; 
    A32; 

    B31; 
    B32; 
    B33; 
    } 

    A1 -> A21; 
    A1 -> A22; 
    A1 -> A23; 
    A1 -> A24; 

    B1 -> B21; 
    B1 -> B22; 
    B1 -> B23; 
    B1 -> B24; 

    A21 -> A31; 
    A22 -> A31; 
    A23 -> A31; 

    A23 -> A32; 

    B21 -> B31; 

    B21 -> B32; 
    B22 -> B32; 

    B21 -> B33; 
    B23 -> B33; 
} 

をちょうど2つのサブのグラフでは、それは悪いのですが、それでも恐ろしいではありません。しかし、さらにサブグラフを追加すると、それは醜くて面倒になります。

グラフビズを使用して元のノードのレイアウトを維持しながら、シャドーとラベルを付けてノードをグループ化する方法はありますか?

+0

私がドットに問題があったときは、ここに投稿するのが最善の方法だとわかりました。 http://www.graphviz.org/forum –

答えて

3

それは試行錯誤の多くを意味しますが、少なくともあなたは目に見えないノードと(私は推測)あなたが望む結果を得るため、これはおそらく良い答えではありません。

digraph { 
    rankdir=LR; 

    subgraph cluster_level1 { 
    label = "Level 1"; 
    style=filled; 
    color=lightgrey; 
    A01[ style = invis ]; 
    A1; 
    A02[ style = invis ]; 
    A03[ style = invis ]; 
    A06[ style = invis ]; 
    A05[ style = invis ]; 
    B1; 
    A04[ style = invis ]; 
    } 

    subgraph cluster_level2 { 
    label = "Level 2"; 
    style=filled; 
    color=lightgrey; 

    A21; 
    A22; 
    A23; 
    A24; 

    B21; 
    B22; 
    B23; 
    B24; 
    } 

    subgraph cluster_level3 { 
    label = "Level 3"; 
    style=filled; 
    color=lightgrey; 

    A07[ style = invis ]; 
    A31; 
    A32; 
    A08[ style = invis ];    

    B31; 
    B32; 
    B33; 
    A01[ style = invis ]; 
    A09[ style = invis ]; 
    } 

    A1 -> A21; 
    A1 -> A22; 
    A1 -> A23; 
    A1 -> A24; 

    B1 -> B21; 
    B1 -> B22; 
    B1 -> B23; 
    B1 -> B24; 

    A21 -> A31; 
    A22 -> A31; 
    A23 -> A31; 

    A23 -> A32; 

    B21 -> B31; 

    B21 -> B32; 
    B22 -> B32; 

    B21 -> B33; 
    B23 -> B33; 
} 

利回り

enter image description here

+0

私はそれをやるよりスマートな方法を望んでいましたが、これは私が今までに得た最良の方法です。ありがとう:) –