4.15 ダイアグラムを作成する

ダイアグラムやフローチャートを生成する, R とは独立したプログラム (例: Graphviz) は多くありますが, これらは Rmd 文書内のコードチャンク内で直接取り扱うほうが簡単です.

R ではいくつかのパッケージが使用可能ですが, その中で DiagrammeR (Iannone 2020) とその他いくつかを最後に簡単に解説します. 完全なデモは https://rich-iannone.github.io/DiagrammeR/ で見ることができます. この節では基本的な使用法とダイアグラム内で R コードを使う方法を紹介します.

4.15.1 基本的なダイアグラム

DiagrammeR はいくつかの異なるグラフ言語を使ってグラフを作成する方法を提供します. この節では Graphviz の例を提示しますが,17 DiagrammeR は純粋に R コードだけでグラフを作ることもできます.

RStudio IDE は Graphviz (.gv) および mermaid (.mmd) ファイルをネイティブにサポートしています. これらのタイプのファイルを RStudio で編集すると, シンタックスハイライトされるという利点があります. RStudio のツールバーの “Preview” ボタンをクリックすると, ダイアグラムをプレビューすることができます. 図4.4 は, 4つのステップを表す4つの矩形で構成された, フローチャートの単純な例です. これは以下のコードで生成されています.

DiagrammeR::grViz("digraph {
  graph [layout = dot, rankdir = TB]
  
  node [shape = rectangle]        
  rec1 [label = 'ステップ 1. 起床する']
  rec2 [label = 'ステップ 2. コードを書く']
  rec3 [label = 'ステップ 3. ???']
  rec4 [label = 'ステップ 4. 収入を得る']
  
  # ノードIDでエッジを定義
  rec1 -> rec2 -> rec3 -> rec4
  }",
  height = 500)

図 4.4: プログラマの絵空事を表したダイアグラム

ノードの形状, 色, 線のタイプを定義したり, パラメータを追加したりできる拡張的な操作も用意されています.

4.15.2 図にパラメータを追加する

Graphviz の置換機能は可読性を損なうことなく, R コードを Graphviz のグラフ設定に混ぜ込むことができます. @@ を伴う置換を指定するには, そこに置換されるのは有効な R 評価式であることを確実にせねばなりません. 評価式は脚注として置かれ, そして R ベクトルオブジェクトを返すものでなくてはなりません. @@ という記法のすぐ後には数字が続き, これは R 評価式の脚注番号に対応します. 図4.5はダイアグラムへの R コードの埋め込みと評価の例です.

DiagrammeR::grViz("
  digraph graph2 {
  
  graph [layout = dot, rankdir = LR]
  
  # node definitions with substituted label text
  node [shape = oval]
  a [label = '@@1']
  b [label = '@@2']
  c [label = '@@3']
  d [label = '@@4']
  
  a -> b -> c -> d
  }
  
  [1]: names(iris)[1]
  [2]: names(iris)[2]
  [3]: names(iris)[3]
  [4]: names(iris)[4]
  ",
  height = 100)

図 4.5: R から入力されたパラメータを使用したダイアグラム

4.15.3 その他のダイアグラム作成パッケージ

ダイアグラム作成に使えるパッケージとして, nomnoml (de Vries and Luraschi 2020), diagram (Soetaert 2020), dagitty (Textor, van der Zander, and Ankan 2021), ggdag (Barrett 2021), plantuml (https://github.com/rkrug/plantuml) といったものも見ておくとよいでしょう.

参考文献

Barrett, Malcolm. 2021. Ggdag: Analyze and Create Elegant Directed Acyclic Graphs. https://github.com/malcolmbarrett/ggdag.
de Vries, Andrie, and Javier Luraschi. 2020. Nomnoml: Sassy UML Diagrams. https://github.com/rstudio/nomnoml.
Iannone, Richard. 2020. DiagrammeR: Graph/Network Visualization. https://github.com/rich-iannone/DiagrammeR.
Soetaert, Karline. 2020. Diagram: Functions for Visualising Simple Graphs (Networks), Plotting Flow Diagrams. https://CRAN.R-project.org/package=diagram.
Textor, Johannes, Benito van der Zander, and Ankur Ankan. 2021. Dagitty: Graphical Analysis of Structural Causal Models. https://CRAN.R-project.org/package=dagitty.

  1. あなたのバックグラウンド次第では, この節は DiagrammeR に対する偏った解説になるかもしれません. このパッケージに興味があるなら, パッケージの公式ドキュメントをご覧ください.↩︎