MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

ggplot2の図にテキストを書き入れる方法:目的別の使い分けと実践コード


Rのggplot2を使ってグラフを作成している際、「特定のデータ点に名前を入れたい」「グラフの余白に補足説明を追加したい」と考えたことはないだろうか。

グラフは視覚的にトレンドを伝えるのが得意だが、「言葉(テキスト)」を添えることで、読み手の理解度は飛躍的に高まる。しかし、ggplot2にはテキストを追加する方法が複数あり、初心者にとってはどれを選択すべきか迷いやすい。

本記事では、annotate()geom_text() の使い分けから、実戦で役立つ回帰式の表示方法までを分かりやすく解説する。


>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

目次

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()xy は、「グラフの軸のメモリ(数値)」をそのまま指定すればよい。

  • 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)

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

使い所:いつ、どの関数を使うべきか?

手法主な用途特徴
annotate()図全体の補足、回帰式、矢印座標を直接指定。1〜数箇所の注釈に最適。
geom_text()全データ点のラベル表示データと連動。数が多いと重なりやすい。
ggrepel密集したデータのラベリング重なりを自動回避。論文やレポートで必須。

ggplot2の図にテキストを書き入れる時の限界

  1. 座標管理の煩わしさ: データの範囲が変わると、固定座標で指定したテキストが図の外に消えてしまうことがある。
  2. 情報過多: 文字を入れすぎると、データのトレンドを阻害してしまう。「本当に必要な情報か」を常に意識すべきだ。
  3. 日本語フォントの問題: OS等の環境によって文字化けすることがある。その場合は theme(text = element_text(family = "Hiragino Sans")) 等の指定が必要になる。

まとめ

ggplot2でテキストを入れる際は、単なる補足なら annotate()データの内容を表示するなら geom_text()重なりが気になるなら ggrepel という使い分けが基本となる。

説得力のあるグラフを作成し、データ分析の結果をより明確に伝えていこう。

おすすめ書籍

誰も教えてくれなかった 医療統計の使い分け〜迷いやすい解析手法の選び方が,Rで実感しながらわかる!


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

コメント

コメントする

目次