2017-04-25 17 views
3

このような図を描きたいと思います。 desiredGraphViz - サブグラフの整列

しかし、私は描くことができる唯一の図は、次のとおりです。 current

私が使用したコード:

graph [rankdir = LR] 

node [shape=box] 

x1;x2;x3;y1;y2;y3;y4;y5;y6;y7;y8; 

node [shape=oval] 

ind60;dem60;dem65 

{x1,x2,x3} -> ind60[arrowhead=none arrowtail=normal dir=both] 

{y1,y2,y3,y4} -> dem60[arrowhead=none arrowtail=normal dir=both] 

dem65 -> {y5,y6,y7,y8} 

ind60->dem60 dem60->dem65 ind60->dem65 

どのように私は希望のプロットを描くことができますか?

答えて

1

rank=sameを使用して、あなたが達成したいものをするには、まず、見えないエッジグループ、およびconstraint=false

digraph { 

node [shape=box] 
{ 
    rank=same; 
    y1;y2;y3;y4; 
} 

dem60[shape=oval]; 
{y1;y2;y3;y4} -> dem60 [dir=back]; 

{ 
    rank=same; 
    x2 [group=left]; 
    ind60[shape=oval]; 
    dem65[shape=oval]; 
    y6 [group=right]; 

    x2 -> ind60 [dir=back]; 
    ind60 -> dem65 
    dem65 -> y6; 
} 

// Invisible edges to order vertically node groups 
edge[style=invis]; 
x1[group=left]; 
x3[group=left]; 
x1 -> x2 -> x3; 
node[group=right]; 
y5 -> y6 -> y7 -> y8; 

node[group=""] 
edge[style=solid] 
ind60->dem60 
dem60->dem65 

edge[constraint=false]; 
ind60 -> x1; 
ind60 -> x3; 
dem65 -> y5; 
dem65 -> y7; 
dem65 -> y8; 
} 
  • groupは、ノードの垂直alignementを強制(の同じグループ)。
  • rank=sameは、ノードを同じランクに留まらせます。
  • 目に見えないエッジは、垂直グループ内で順位を適用します。
  • constraint=falseは、一部のエッジの制約条件の計算を削除します。
  • dir=backは、表示されたエッジ方向を反転させます。