Graphvizで凡例付きユースケース図

Graphvizで凡例付きユースケース図を書く。

Graphvizで凡例付きユースケース

digraph sample {
  graph [fontname = "monospace", fontsize = 10, rankdir = LR];
  node  [fontname = "monospace", fontsize = 10];
  edge  [fontname = "monospace", fontsize = 10];

  // legend
  subgraph cluster_legend {
    label = "凡例";

    // node
    node     [shape = box];
    actor_ex [label = "<<Actor>>\nアクター"];

    // border
    subgraph cluster_legend_border {
       label = "境界";

       // node
       node        [shape = box];
       use_case_ex [label = "ユースケース"];
    }

    // edge
    actor_ex -> use_case_ex [dir = none, label = "関連"];
  }

  // node
  node   [shape = box];
  actor1 [label = "<<Actor>>\nアクター1"];
  actor2 [label = "<<Actor>>\nアクター2"];
  actor3 [label = "<<Actor>>\nアクター3"];

  // border
  subgraph cluster_border {
    // node
    node      [shape = box];
    use_case1 [label = "処理1"];
    use_case2 [label = "処理2"];

    // rank
    {rank = same; use_case1; use_case2 };
  }

  // edge
  actor1 -> use_case1 [dir = none];
  actor2 -> use_case1 [dir = none];
  actor2 -> use_case2 [dir = none];
  use_case2 -> actor3 [dir = none];

  // rank
  {rank = same; actor1; actor2 };
}