はじめに
ggplot2 で \(TeX\) 記法が使えると嬉しいですよね.一応,そういう人たちのための入口としては expression だとか bquote だとかがあるんですが,ここでは紹介しません.いえ,毎度使い方を忘れてしまい,紹介できないというのが正しいです.
そんな私に latex2tex パッケージ.
TeX() により, \(TeX\) 記法の文字列をRの expression に変換してくれます.覚えることが少なくシンプルになっていいですね.皆さんも是非.
library(latex2exp)
TeX('\\LaTeX')## expression(`\LaTeX` = paste("", L^{
## phantom()[phantom()[phantom()[scriptstyle(A)]]]
## } * T[textstyle(E)] * X))インストール
CRANにもありますが,後述の通りバグが放置されているのでGitHub版を薦めます.
devtools::install_github('stefano-meschiari/latex2exp')使ってみる
タイトルなどで \(TeX\)
labs() や ggtitle() , xlab() , ylab() では以下のように TeX() がとても活躍します.
library(tidyverse)
library(latex2exp)
d <- data.frame(x = seq(0, 10), y = dpois(x = seq(0, 10), lambda = 3))
ggplot(d, aes(x = x, y = y)) +
geom_point() +
geom_line() +
labs(
title = TeX('$P(X = k; \\lambda = 3) = \\frac{\\lambda^k e^{-\\lambda}}{k!}$'),
y = TeX('$P(X = k; \\lambda = 3)$'),
x = TeX('$k$')
)
geom_text で \(TeX\)
この場合,geom_text(aes(label = )) がcharacter型ベクトルしか受け付けないので注意が必要です.
github版の TeX() には output = 'character' というオプションがあるのでこれを利用しましょう.
その上で,geom_text(parse = TRUE) します.
d <- data.frame(
x = seq(3),
label = TeX(c('$\\alpha$', '$\\beta$', '$\\gamma$'), output = 'character')
)
ggplot(d, aes(x = x, y = x, label = label)) +
geom_text(parse = TRUE) +
theme_void()
そもそも,data frameが expression を受け付けないので, output = 'expression' ではどうしようもないのも確か.
CRAN版では output = 'text' というものが用意されていますが,返り値は expression のままなので注意 (バグ?).
CRAN版を使う場合は as.character すると,GitHub版の output = 'character' 相当になります.
as.character(TeX('$\\alpha$', output = 'expression'))## [1] "paste(\"\", \"\", alpha, , , , \"\")"TeX('$\\alpha$', output = 'character')## $\\alpha$
## "paste('','',alpha,,,,'')"実際には上記の通り,エスケープを使うかどうかがちょっと違いますが,ちゃんと機能します.
d <- data.frame(
x = seq(3),
label = as.character(TeX(c('$\\alpha$', '$\\beta$', '$\\gamma$'), output = 'expression'))
)
ggplot(d, aes(x = x, y = x, label = label)) +
geom_text(parse = TRUE) +
theme_void()
facet_wrap や facet_grid で \(TeX\)
facet の strip でも勿論 \(TeX\) できます.この場合は,facet_wrap や facet_grid のオプションで, labeller = label_parsed します.
ggplot(d, aes(x, x)) +
geom_point() +
facet_wrap(~ label, labeller = label_parsed)
Atusy's blog