Rのggplot2を使ってグラフを作成している際、「特定のデータ点に名前を入れたい」「グラフの余白に補足説明を追加したい」と考えたことはないだろうか。
グラフは視覚的にトレンドを伝えるのが得意だが、「言葉(テキスト)」を添えることで、読み手の理解度は飛躍的に高まる。しかし、ggplot2にはテキストを追加する方法が複数あり、初心者にとってはどれを選択すべきか迷いやすい。
本記事では、annotate() や geom_text() の使い分けから、実戦で役立つ回帰式の表示方法までを分かりやすく解説する。
ggplot2とは
ggplot2は、R言語で最も広く利用されているデータ可視化パッケージである。「Grammar of Graphics(グラフィックスの文法)」という思想に基づいており、図形や軸、色、テキストなどの要素を「レイヤー(層)」として積み重ねていくのが特徴だ。
テキストを追加する場合も、新しいレイヤーを一枚重ねるという感覚で操作するため、慣れてしまえば非常に自由度の高いカスタマイズが可能になる。
ggplot2の図にテキストを書き入れるRスクリプト例
① 特定の場所に注釈を入れる(annotate)
データフレームに含まれない独立した文字を入れたい場合は annotate() を使用する。
library(ggplot2)
# ベースの図
p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
# 特定の座標にテキストを追加
p + annotate("text", x = 4, y = 30, label = "ここに注目!",
color = "red", size = 5, fontface = "bold")

【初心者向け】座標指定のコツ
annotate() の x と y は、「グラフの軸のメモリ(数値)」をそのまま指定すればよい。
- x座標: 横軸の数値。
- y座標: 縦軸の数値。
例えば、横軸が「4」、縦軸が「30」の地点に文字を置きたいなら、x = 4, y = 30 と記述する。
Tips: 文字の配置を微調整する
デフォルトでは指定した座標に文字の「中心」が重なる。
hjust = 0: 左揃え(指定座標から右に伸びる)vjust = 1: 上揃え(指定座標から下に伸びる)
② 全てのデータ点にラベルを付ける(geom_text)
データフレーム内の変数(列)をそのままラベルとして表示する方法である。
# 車種名(row names)をラベルとして表示
ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
geom_text(aes(label = rownames(mtcars)), vjust = -1, size = 3)

③ 文字の重なりを自動で防ぐ(ggrepel)
データ点が多いとラベルが重なって読めなくなる。その解決策として非常に強力なのが ggrepel パッケージだ。
# install.packages("ggrepel")
library(ggrepel)
ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
# 文字の重なりを自動で回避
geom_text_repel(aes(label = rownames(mtcars)), size = 3)

④ 応用編:回帰直線の式を図に書き入れる
散布図に回帰直線(傾向線)を引いた際、その「式」や「決定係数($R^2$)」を表示したい場面は非常に多い。
# 1. 回帰モデルを作成
model <- lm(mpg ~ wt, data = mtcars)
# 2. 係数を抽出してテキストを作成
formula_text <- sprintf("y = %.2fx + %.2f", coef(model)[2], coef(model)[1])
r2_text <- sprintf("R^2 = %.2f", summary(model)$r.squared)
full_label <- paste(formula_text, r2_text, sep = "\n")
# 3. グラフに描画
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue") +
annotate("text", x = 5, y = 30, label = full_label,
color = "blue", size = 5, hjust = 0.5)

使い所:いつ、どの関数を使うべきか?
| 手法 | 主な用途 | 特徴 |
annotate() | 図全体の補足、回帰式、矢印 | 座標を直接指定。1〜数箇所の注釈に最適。 |
geom_text() | 全データ点のラベル表示 | データと連動。数が多いと重なりやすい。 |
ggrepel | 密集したデータのラベリング | 重なりを自動回避。論文やレポートで必須。 |
ggplot2の図にテキストを書き入れる時の限界
- 座標管理の煩わしさ: データの範囲が変わると、固定座標で指定したテキストが図の外に消えてしまうことがある。
- 情報過多: 文字を入れすぎると、データのトレンドを阻害してしまう。「本当に必要な情報か」を常に意識すべきだ。
- 日本語フォントの問題: OS等の環境によって文字化けすることがある。その場合は
theme(text = element_text(family = "Hiragino Sans"))等の指定が必要になる。
まとめ
ggplot2でテキストを入れる際は、単なる補足なら annotate()、データの内容を表示するなら geom_text()、重なりが気になるなら ggrepel という使い分けが基本となる。
説得力のあるグラフを作成し、データ分析の結果をより明確に伝えていこう。
おすすめ書籍
誰も教えてくれなかった 医療統計の使い分け〜迷いやすい解析手法の選び方が,Rで実感しながらわかる!




コメント