Rのプロットの中にちょっとした数式を書き込みたいときは expression()
という関数を使う。
?plotmath
でヘルプを見ると説明がある。
demo(plotmath)
でデモが見られる。
標準正規分布の分布関数をプロットして,タイトルに $\dfrac{1}{\sqrt{2\pi}} \exp(-x^2/2)$ という数式を書いてみよう。
curve(dnorm(x), xlim=c(-3,3), ylab="",
main=expression(frac(1,sqrt(2*pi))*exp(-x^2/2)))
私の環境のデフォルトのフォント(ヒラギノ)で何とか数式が表示された。しかし,このフォントではイタリック体がうまく出ない。そこで,フォントをTimesに変えてやってみる。文字 $x$ だけイタリック体にする。
curve(dnorm(x), xlim=c(-3,3), xlab=expression(italic(x)), ylab="",
main=expression(frac(1,sqrt(2*pi))*exp(-italic(x)^2/2)),
family="Times")
微妙な違いだが exp(...) を数式扱いではなくテキストとして書くには次のようにする:
curve(dnorm(x), xlim=c(-3,3), ylab="",
main=expression(paste(frac(1,sqrt(2*pi)), "exp(", -x^2/2, ")")))
このほうが括弧が締まって見えるようにも思う。
expression(...)
と同じことだが parse(text="...")
とすれば文字列として数式が与えられることを教えていただいた:
curve(dnorm(x), xlim=c(-3,3), ylab="",
main=parse(text="frac(1,sqrt(2*pi))*exp(-x^2/2)"))
この方法なら数式を表す文字列を sprintf()
などで生成することも簡単である。
ほかにも substitute()
などがあることを教えていただいた。RjpWikiのグラフィックス参考実例集:数式のプロット参照。
われわれは数式の記法としては $\mathrm{\LaTeX}$ に慣れている。その記法を上記plotmathの記法に変換してくれる TeX()
という関数がパッケージ latex2exp により提供されている。これはあくまでplotmathの枠内で数式を書くものであり,新しい機能を追加するものではないが,plotmathの独自記法を覚える必要がないという点で便利である。
install.packages("latex2exp")
library(latex2exp)
詳細はGitHubの stefano-meschiari/latex2exp に解説がある。
これを使えば,このページの最初の例は次のように書くことができる。バックスラッシュは2重に書くことに気をつけなければならない。
curve(dnorm(x), xlim=c(-3,3), xlab=TeX("$x$"), ylab="",
main=TeX("$\\frac{1}{\\sqrt{2\\pi}}\\exp(-x^2/2)$"))
ただ,文字は自動的にはイタリック体にならない。明示的に \\mathit{x}
のように書く必要がある。
curve(dnorm(x), xlim=c(-3,3), xlab=TeX("$\\mathit{x}$"), ylab="",
main=TeX("$\\frac{1}{\\sqrt{2\\pi}}\\exp(-\\mathit{x}^2/2)$"),
family="Times")
本格的な $\mathrm{\LaTeX}$ の数式を書くには,Rの tikzDevice を使えばよい。
TikZの解説は拙著[改訂第6版]LaTeX2e 美文書作成入門の付録Dにある。RでtikzDeviceを使う方法はpp.368-369にある。ここではR-Forgeからインストールするように書かれているが,現在はCRANに入っているので,単に
install.packages("tikzDevice")
でインストールできる。開発はGitHubの yihui/tikzDevice で行われている。
念のため拙著で描いた図を再掲しておく。
Last modified: