サブグラフ

graphviz-subgraph.png
cluster.png

ここで、サブグラフの名前を「cluster0」と「cluster1」にしていますが、
サブグラフは「cluster」 という名称で始まっているかどうかで扱いが異なります。
「cluster」という名称で始まらない場合、外枠は描かれず、 また、指定したラベルなども表示されません。

digraph G {
 
    subgraph cluster_0 {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white];
        a0 -> a1 -> a2 -> a3;
        label = "process #1";
    }
 
    subgraph cluster_1 {
        node [style=filled];
        b0 -> b1 -> b2 -> b3;
        label = "process #2";
        color=blue
    }
    start -> a0;
    start -> b0;
    a1 -> b3;
    b2 -> a3;
    a3 -> a0;
    a3 -> end;
    b3 -> end;
 
    start [shape=Mdiamond];
    end [shape=Msquare];
}

全体では左→右だけど、サブグラフ内は上→下にしたい

subgraph内でrankdirは効かない。

rank=same

が効き目あり。
それをやるには

{rank=same;    
    inputhandle[label="入力情報の取得"];
    update[label="データ更新"];
    draw[label="描画"];
    inputhandle->update->draw;
    }

のようにrank=sameで始めて、同じ階層にしたいところを{ブラケット}で囲むのだ。
digraph blockdiagram {
    graph[rankdir=LR];
 
  node [shape=none,color="transparent"]input output;
  node[shape=box,color=black,fontname="Consolas"];
  subgraph cluster_mainloop{
      color=black;
      {rank=same;    
    inputhandle[label="入力情報の取得"];
    update[label="データ更新"];
    draw[label="描画"];
    inputhandle->update->draw;
    label="メインループ";
    }
  }
  input [label=<<table><tr><td><img src="img/input.png"/></td></tr></table>>];
  output [label=<<table><tr><td><img src="img/output.png"/></td></tr></table>>];
 
  input->GUI->inputhandle;
  draw->output;
 
}

サブグラフを端点とするエッジ

sample08-04.gif
   digraph sample {
       graph [compound = true]; // compound 属性を true に
       subgraph cluster0 {
         label = "area 0";
        a->b;
         a->c;
      }
     subgraph cluster1 {
       label = "area 1";
      d->e;
      d->f;
     }
    b->d;
   c->d [ltail=cluster0]; // エッジの始端を cluster0 に
   c->f [lhead=cluster1]; // エッジの終端を cluster1 に
   a->f [ltail=cluster0, lhead=cluster1]; // エッジ両端を指定
 }

サブグラフに可能なスタイル

  • C…cluster subgraph
  • S…ただのサブグラフ
属性名 適用できるタイプ デフォルト値 意味 可能なレイアウト
rank S rankType 階層のどの位置にいるのか dot only
bgcolor GC color ,colorList <none> 全体の背景色
labeljust GC string "c"
lheight GC double write only
lp EGC point write only
lwidth GC double write only
colorscheme ENCG string ""
gradientangle NCG int ""
pencolor C color black
penwidth CNE double 1.0 最小値は0.0
peripheries NC int shape default(nodes)

1(clusters) 0

文字系

属性名 適用できるタイプ デフォルト値 意味 可能なレイアウト
fontcolor ENGC color black
fontname ENGC string "Times-Roman"
fontsize ENGC double 14.0
label ENGC lblString "\N" (nodes)"" (otherwise)
labelloc NGC string "t"(clusters)"b"(root graphs)"c"(nodes)

見た目・レイアウト系

属性名 適用できるタイプ デフォルト値 意味 可能なレイアウト
margin NCG double,point <device-dependent>
nojustify GCNE bool false
sortv GCN int 0 0
style ENCG style "" サブグラフの範囲を示す四角形のスタイルについての指定。solid,dashed,dotted,bold,rounded,filled,striped

svg onlyのもの

属性名 適用できるタイプ デフォルト値 意味 可能なレイアウト
target ENGC escString string <none> svg, map only
href GCNE escString "" svg, postscript, map only リンクを貼る
id GCNE escString "" svg, postscript, map only
tooltip NEC escString "" svg, cmap only
URL ENGC escString <none> svg, postscript, map only

その他 特殊系

K GC double 0.3 0 sfdp, fdp only
area NC double 1.0 >0 patchwork only

graphviz-style

サポートサイト Wikidot.com graphviz-style