8 様々なグラフィックプログラムの埋め込み
8.1 tikz
を使う
LaTeX で使われる tikzdevice
を利用して, 直接 tikz
の記述による画像を埋め込むことができる. チャンクのエンジンを tikz
とすることで使用でき, 相互参照やキャプション, 画像サイズの指定といったチャンクオプションも使える. 図 8.1 はmathchaというサービスで作成した図を tikz のソースとしてエクスポートしたものから生成した図である (ソースコードは長大なので掲載を省略してある). HTML出力ではデフォルトでラスタ画像に変換され表示される.
TODO: しかし現状ではpdflatex以外のエンジンに変更できないため, 日本語表示が難しい.
8.2 Asymptote を使う
同様に, Asymptote のプログラムを埋め込むこともできる. 私は Asymptote が分からないので RCB Ch. 15.9 Asymptote でグラフィックを作成する と同様のプログラムを書いておく. (図 8.2).
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;
}
なお, RCB, Ch. 4.15 でも紹介されているように DOT 言語は DiagrammeR
パッケージを経由して使うこともできる18が, grViz()
関数の出力は HTML を前提としているため, PDF での出力時のサイズや解像度の調整がうまくいかないことが多い.
一方で, ggdag
パッケージはggplot2
ベースのパッケージなので, 一般的な R グラフィックスと同じ扱いでグラフィカルモデルを描画できる (つまり名前に反して DAG 以外のネットワーク図も記述可能である). ggplot2
風の構文で記述できるので習熟も容易である.
私も詳しいことは知らないが,
DiagrammeR::grViz()
の構文は本来の DOT と少し異なるようだ, 本来はステートメントごとにセミコロンで区切ることが必要であり, 文字列もダブルクオーテーションで囲まなければならないが,grViz()
ではそのような制約がない.↩︎