ggplot2でギリシャ文字や数式を表示したい

# Q. ギリシャ文字や数式を表示したいです

# A. 
大きく分けると以下の二つの場合に分けられます。

- `expression`関数を呼ぶだけでよい場合
- ggplot2が用意している、文字列を`expression`オブジェクトに変換するオプションを利用する場合

## 各種タイトル（`title`, `axis.title`, `legend.title`など）に表示する場合
`expression`関数を使います。

```OK_example1.R
library(ggplot2)

d <- data.frame(X=rep(1:5, 2), Y=c(1:5, 5:1), A=rep(c('a','b'), each=5))

ggplot(data=d, aes(x=X, y=Y, group=A, color=A)) +
  geom_line(size=2) +
  labs(x=expression(xi), y=expression(eta), color=expression(omega))
```

![OK_example1.png](https://qiita-image-store.s3.amazonaws.com/0/12869/0ddb8524-3b76-d4ad-25d7-5570f4873ab6.png)

なお、`expression`関数で使用できる記法については以下を見るとよいです。

- [R-Source 56. 数式の描画 ](http://cse.naro.affrc.go.jp/takezawa/r-tips/r/56.html)
- [Mathematical Annotation in R](https://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/plotmath.html)

## 軸のラベル（`axis.text`）に表示する場合
`expression`関数を使います。

```OK_example2.R
library(ggplot2)

d <- data.frame(X=tolower(LETTERS[1:4]), Y=1:4)

ggplot(d, aes(x=X, y=Y)) +
  geom_bar(colour='black',fill='white', stat='identity') +
  scale_x_discrete(breaks=c('a', 'b', 'c', 'd'),
                   labels=c(expression(Delta^2), expression(q^n), expression(log(z)), expression(over(omega,(x + 13)^2))))
```

![OK_example2.png](https://qiita-image-store.s3.amazonaws.com/0/12869/3f9f954c-c7ee-208c-179a-897356b537fb.png)

## 凡例のラベル（`legend.text`）に表示する場合
`expression`関数を使います。

```OK_example3.R
library(ggplot2)

d <- data.frame(X=rep(1:5, 2), Y=c(1:5, 5:1), A=rep(c('alpha','beta'), each=5))

ggplot(data=d, aes(x=X, y=Y, group=A, color=A)) +
  geom_line(size=2) +
  scale_color_manual(values=c('blue', 'red'),
                     breaks=c('alpha', 'beta'),
                     labels=c(expression(alpha), expression(beta)))
```

![OK_example3.png](https://qiita-image-store.s3.amazonaws.com/0/12869/f5fed8fa-6103-dcd8-41aa-2967dfbe19da.png)

### 変数の値を使いたい場合
例えば[この記事](http://tips-r.blogspot.jp/2015/04/rbquote.html)にあるように`expression`関数ではうまくいきません。`bquote`関数を使うのも便利ですが、有効数字の表示を制御するのが難しいため、僕は`sprintf`関数で文字列を作ってから`parse`関数を使って`expression`オブジェクトにしています。

```OK_example3b.R
library(ggplot2)

d <- data.frame(X=rep(1:5, 2), Y=c(1:5, 5:1), A=rep(c('alpha','beta'), each=5))

val1 <- 1.0
val2 <- 2.5
mylabs <- c(parse(text=sprintf('alpha=="%.1f"', val1)), parse(text=sprintf('beta=="%.1f"', val2)))
# mylabs <- parse(text=c(sprintf('alpha=="%.1f"', val1), sprintf('beta=="%.1f"', val2)))

ggplot(data=d, aes(x=X, y=Y, group=A, color=A)) +
  geom_line(size=2) +
  scale_color_manual(values=c('blue', 'red'),
                     breaks=c('alpha', 'beta'),
                     labels=mylabs)
```

![OK_example3b.png](https://qiita-image-store.s3.amazonaws.com/0/12869/9a132bf4-77ab-14d3-5b97-da0e9728afa8.png)

なお、7行目の代わりにコメントアウトしてある8行目を使っても同じ図を描くことができます。

## 図中に表示したい
`geom_text`関数や`annotate`関数を使う際に、`parse = TRUE`というオプションを指定して`expression`オブジェクトに変換します。

```OK_example4.R
library(ggplot2)

d <- data.frame(X=1:3, Y=1:3, Label=c('alpha', 'over(beta,gamma)','Delta'))

ggplot(data=d, aes(x=X, y=Y, label=Label)) +
  geom_text(parse=TRUE)
```

![OK_example4.png](https://qiita-image-store.s3.amazonaws.com/0/12869/ce42d3da-a1c6-09a2-fab9-77b242278c9e.png)

## Facetのラベル（`strip.text`）に表示したい
`facet_grid`関数や`facet_wrap`関数を使う際に、`labeller = label_parsed`というオプションを指定して`expression`オブジェクトに変換します。

```OK_example5.R
library(ggplot2)

d <- data.frame(X=rep(1:5, 2), Y=c(1:5, 5:1), A=rep(c('alpha','beta'), each=5))

ggplot(data=d, aes(x=X, y=Y)) +
  facet_grid(. ~ A, labeller=label_parsed) +
  geom_line(size=2)
```

![OK_example5.png](https://qiita-image-store.s3.amazonaws.com/0/12869/c79f76b0-119f-32cc-6ac7-e571768aa993.png)

なお、`facet_grid(. ~ A, labeller=label_parsed)`を`facet_wrap(~ A, labeller=label_parsed)`に置き換えれば`facet_wrap`関数でも同様に使うことができます。

### 変数の値を使いたい場合
あらかじめ`expression`オブジェクトに変換される文字列を作って、データフレームに入れておく方法が手間が少ないと思います。

```OK_example5b.R
library(ggplot2)

val1 <- 1.0
val2 <- 2.5
mylabs <- rep(c(sprintf('alpha==10^"%.1f"', val1), sprintf('beta==10^"%.1f"', val2)), each=5)
d <- data.frame(X=rep(1:5, 2), Y=c(1:5, 5:1), A=mylabs)

ggplot(data=d, aes(x=X, y=Y)) +
  facet_grid(. ~ A, labeller=label_parsed) +
  geom_line(size=2)
```

![OK_example5b.png](https://qiita-image-store.s3.amazonaws.com/0/12869/d784439e-c45e-1e76-c75a-a4da3350ec45.png)

# 参考資料
http://docs.ggplot2.org/current/theme.html
https://github.com/hadley/ggplot2/wiki/Plotmath
http://stackoverflow.com/questions/5293715/how-to-use-greek-symbols-in-ggplot2
http://stackoverflow.com/questions/6202667/how-to-use-subscripts-in-ggplot2-legends-r?noredirect=1&lq=1
http://stackoverflow.com/questions/14181234/facet-labels-involving-a-greek-symbol?noredirect=1&lq=1
http://stackoverflow.com/questions/6525857/how-can-i-use-grid-to-edit-a-ggplot2-object-to-add-math-expressions-to-facet-lab?rq=1