8 様々なグラフィックプログラムの埋め込み

8.1 tikz を使う

LaTeX で使われる tikzdevice を利用して, 直接 tikz の記述による画像を埋め込むことができる. チャンクのエンジンを tikz とすることで使用でき, 相互参照やキャプション, 画像サイズの指定といったチャンクオプションも使える. 図 8.1mathchaというサービスで作成した図を tikz のソースとしてエクスポートしたものから生成した図である (ソースコードは長大なので掲載を省略してある). HTML出力ではデフォルトでラスタ画像に変換され表示される.

TODO: しかし現状ではpdflatex以外のエンジンに変更できないため, 日本語表示が難しい.

mathcha からエクスポートした tikz の表示

図 8.1: mathcha からエクスポートした tikz の表示

8.2 Asymptote を使う

同様に, Asymptote のプログラムを埋め込むこともできる. 私は Asymptote が分からないので RCB Ch. 15.9 Asymptote でグラフィックを作成する と同様のプログラムを書いておく. (図 8.2).

Asymptote による画像

図 8.2: Asymptote による画像

8.3 (TODO) その他のプログラム

D3.js なども使える

8.4 (TODO) その他の R プログラム

8.5 DOT 言語とグラフィカルモデル

graphviz などで使用される DOT 言語を使用してグラフィカルモデルを描画することもできる. この場合, チャンクのエンジンを dot にするのではなく, エンジンは r のままで, engine="dot" を指定すると, コードブロックが DOT 言語として評価される. 図8.3 がその結果である.

digraph test {
  graph [layout = dot, rankdir = TB];
  node [shape = rectangle];
  rec1 [label = "Step 1. 起床する"];
  rec2 [label = "Step 2. コードを書く"];
  rec3 [label = "Step 3. ???", color=blue, style=filled];
  rec4 [label = "Step 4. 給料をもらう", fontsize=20, fontcolor=red];
  rec1 -> rec2 -> rec3 -> rec4;
  }
DOTの動作確認

図 8.3: DOTの動作確認

なお, RCB, Ch. 4.15 でも紹介されているように DOT 言語は DiagrammeR パッケージを経由して使うこともできる18が, grViz() 関数の出力は HTML を前提としているため, PDF での出力時のサイズや解像度の調整がうまくいかないことが多い.

一方で, ggdag パッケージはggplot2 ベースのパッケージなので, 一般的な R グラフィックスと同じ扱いでグラフィカルモデルを描画できる (つまり名前に反して DAG 以外のネットワーク図も記述可能である). ggplot2 風の構文で記述できるので習熟も容易である.


  1. 私も詳しいことは知らないが, DiagrammeR::grViz() の構文は本来の DOT と少し異なるようだ, 本来はステートメントごとにセミコロンで区切ることが必要であり, 文字列もダブルクオーテーションで囲まなければならないが, grViz() ではそのような制約がない.↩︎