ggplot2の軸ラベルに、latex2expパッケージのTeX()関数を使って特殊文字を入れる方法を前に紹介しました。
今回は軸ラベルを改行する方法を紹介します。
\nで改行されない
デフォルトの作図関数では\nで改行できますが、ggplot2とlatex2expパッケージのTeX()関数を組み合わせて使うと改行されません。
今回使用するデータは次のとおりです。単位と()の間に\nが入っています。
| PPFD \n (μmol·$m^{-2}$·$s^{-1}$) | Plant height (cm) |
|---|---|
| 50 | 15.2 |
| 100 | 22.7 |
| 150 | 28.3 |
| 200 | 32.1 |
| 250 | 35.6 |
| 300 | 38.2 |
| 350 | 40.5 |
| 400 | 42.1 |
| 450 | 43.4 |
| 500 | 44.2 |
これをこのままTeX()関数を組み合わせて作図すると次のようになります。

PPFDと(μmol m-2s-1)の間にnが表示されてしまいます。
\oversetを使って改行する
GitHubリポジトリで紹介されていた\oversetを使って改行していきます【参考リンク】。
\oversetはLaTeXで使われるコマンドで、2つの引数を取ります。1つ目の引数は文字や記号、2つ目の引数はベースとなる文字や数式です。このコマンドを使うことで、上に小さな文字や記号を配置できます。
基本構文は以下の通りです。
\overset{上に配置する文字や記号}{ベースとなる文字や数式}
これをコードに組み込むと改行できます。
# 必要なパッケージを読み込む
library(ggplot2)
library(latex2exp)
# データを作成
data <- read.csv(file.choose(),
header = TRUE,
check.names = FALSE,
na.strings = c(" "))
attach(data) # 列名を変数として使うため
# グラフを作成
ggplot(data, aes(x = `Light Intensity (μmol m-2s-1)`, y = `Plant height (cm)`)) +
geom_bar(stat = "identity", fill = "gray", color = "black") +
labs(
x = "\\overset{PPFD}{(μmol·$m^{-2}$·$s^{-1}$)}" %>% TeX(), # \overset関数に直接列名を入力しています
y = colnames(data[2])
) +
theme_classic() +
theme(aspect.ratio = 1) +
scale_y_continuous(expand = c(0, 0))
ラベル改行用の関数を作成する
このままでは使いにくいので、次の関数を作成します。
wrap_label(x)
xには引数として文字列が入ります。
入力された文字列に\nが含まれる場合、その文字列を\nで分割して\overset関数の2つの引数に格納します。
文字列に含まれる\nはひとつだけにしてください。
# 必要なパッケージを読み込む
library(ggplot2)
library(latex2exp)
wrap_label <- function(x){
if (grepl(pattern = "\\\\n", x)) {
X <- strsplit(x, "\\\\n")
paste0("\\overset{",
X[[1]][1],
"}{"
,X[[1]][2],
"}")
}
}
# データ入力
# "path/to/your/file.csv" を任意のCSVファイルのパスに置き換えてください
data <- read.csv("path/to/your/file.csv",
header = TRUE,
check.names = FALSE,
na.strings = c(" "))
attach(data) # 列名を変数として使うため
# グラフを作成
ggplot(data, aes(x = `Light Intensity (μmol m-2s-1)`, y = `Plant height (cm)`)) +
geom_bar(stat = "identity", fill = "gray", color = "black") +
labs(
x = colnames(data[1]) %>% wrap_label() %>% TeX(),
y = colnames(data[2])
) +
theme_classic() +
theme(aspect.ratio = 1) +
scale_y_continuous(expand = c(0, 0))この記事では、ggplot2の軸ラベルを改行する方法を紹介しました。
少しでもお役に立てたら嬉しいです。

