ggplot2で特殊文字が含まれた軸ラベルを改行する

R

ggplot2の軸ラベルに、latex2expパッケージのTeX()関数を使って特殊文字を入れる方法を前に紹介しました。

今回は軸ラベルを改行する方法を紹介します。

\nで改行されない

デフォルトの作図関数では\nで改行できますが、ggplot2とlatex2expパッケージのTeX()関数を組み合わせて使うと改行されません。

今回使用するデータは次のとおりです。単位と()の間に\nが入っています。

PPFD \n (μmol·$m^{-2}$·$s^{-1}$)Plant height (cm)
5015.2
10022.7
15028.3
20032.1
25035.6
30038.2
35040.5
40042.1
45043.4
50044.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の軸ラベルを改行する方法を紹介しました。

少しでもお役に立てたら嬉しいです。

プロフィール
この記事を書いた人

農学の博士前期課程を修了した研究者。
植物生理と環境調節をテーマに研究しています。

Masaをフォローする
RRStudio
Masaをフォローする
タイトルとURLをコピーしました