## はじめに
ggplot2 で図を作るときは、土台のキャンバスを用意して、その上に点・線・色・タイトルといった部品を `+` で重ねていきます。料理でいうとお皿の上におかずを一つずつ盛り付けていくイメージです。
この記事では R に最初から入っている `iris`(アヤメの花のデータ)を使います。読み込み作業が要らないので、コピペすればすぐ動きます。
> ggplot2 のインストールがまだの方 → [[R - ggplot2 のインストール]]
---
## 使うデータの確認
`iris` は R を起動した時点で使えるようになっているデータです。150 行 × 5 列で、3 種類のアヤメ(setosa, versicolor, virginica)について、がくと花弁の長さ・幅が記録されています。
```r
head(iris)
```
```
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
```
この記事では「がくの長さ(Sepal.Length)」を横軸、「花弁の長さ(Petal.Length)」を縦軸にとった散布図を、少しずつ装飾していきます。
---
## ggplot2 の基本の型
ggplot2 のコードは、いつも次の形になります。
```r
p <- ggplot(データ, aes(x = 横軸, y = 縦軸)) +
ここに重ねる部品 +
さらに重ねる部品
```
- `p <-` で図の設計図に「p」という名前を付けて保存します
- そのあと `p` とだけ実行すれば、図が表示されます
- 部品を増やしたいときは `+` でつないでいくだけです
> 図を直接表示することもできますが、`p <-` に入れておくと「もう一度見たい」「あとから装飾を足したい」というときに便利です。
---
## Step 1. 土台を用意する
まずデータと軸だけ指定して、土台のキャンバスを作ります。
```r
library(ggplot2)
p <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length))
p
```
![[ggplot_step1.png]]
軸の目盛りは出ますが、まだ点が打たれていないので灰色の枠だけが表示されます。「ここに何かを乗せてください」という土台の状態です。
---
## Step 2. 点を打つ(散布図にする)
`geom_point()` を `+` でつなげると、点が表示されます。
```r
p <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length)) +
geom_point()
p
```
![[ggplot_step2.png]]
これで散布図の完成です。`geom_` で始まる関数が「何を描くか」を決めます。たとえば `geom_line()` で線、`geom_bar()` で棒グラフになります。
---
## Step 3. 種ごとに色を分ける
`aes()` の中に `color = Species` を追加すると、種ごとに色が変わります。
```r
p <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
geom_point()
p
```
![[ggplot_step3.png]]
凡例も自動で右側に追加されます。`aes()` は「データのどの列を、図のどの見た目(x軸、y軸、色、大きさ)に割り当てるか」を指定する場所です。
---
## Step 4. 点を大きく、少し透明にする
点が重なって見づらいときは、サイズを大きくしたり、透明度を上げると見やすくなります。`geom_point()` のカッコの中に書きます。
```r
p <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
geom_point(size = 3, alpha = 0.7)
p
```
![[ggplot_step4.png]]
- `size = 3`:点の大きさ(標準は 1.5 くらい)
- `alpha = 0.7`:透明度(1 が不透明、0 が完全に透明)
`aes()` の中ではなく `geom_point()` の中に直接書いている点に注意してください。データの列に対応させず「全部の点に同じ設定を当てる」場合は、こちらに書きます。
---
## Step 5. タイトルと軸ラベルを付ける
`labs()` でタイトルと軸の名前を整えます。論文や発表ではここを日本語や正式な単位に変えておくと、見る人に伝わりやすくなります。
```r
p <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
geom_point(size = 3, alpha = 0.7) +
labs(title = "がくの長さ と 花弁の長さ の関係",
x = "がくの長さ (cm)",
y = "花弁の長さ (cm)",
color = "種")
p
```
![[ggplot_step5.png]]
`color = "種"` と書くと、凡例のタイトルも変えられます。
---
## Step 6. 回帰直線を重ねる
`geom_smooth(method = "lm")` を重ねると、線形回帰の直線が引けます。`se = FALSE` を付けると、信頼区間の帯を消せます。
```r
p <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
geom_point(size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "がくの長さ と 花弁の長さ の関係",
x = "がくの長さ (cm)",
y = "花弁の長さ (cm)",
color = "種")
p
```
![[ggplot_step6.png]]
`color = Species` を `aes()` で指定しているので、回帰直線も種ごとに引かれます。点と線で同じ色が共有されるのが ggplot2 の便利なところです。
---
## Step 7. 見た目のテーマを変える
最後に背景を白くしてみます。`theme_bw()` を追加するだけです。
```r
p <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
geom_point(size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "がくの長さ と 花弁の長さ の関係",
x = "がくの長さ (cm)",
y = "花弁の長さ (cm)",
color = "種") +
theme_bw()
p
```
![[ggplot_step7.png]]
他にも `theme_classic()`(軸だけのシンプル)、`theme_minimal()`(背景なし)などがあります。論文用には `theme_bw()` か `theme_classic()` がよく使われます。
---
## 図をファイルに保存する
完成した図を画像として残すには `ggsave()` を使います。
```r
ggsave("iris_scatter.png", p, width = 6, height = 4, dpi = 300)
```
作業ディレクトリに `iris_scatter.png` が保存されます。
> 作業ディレクトリの確認方法 → [[R - 作業ディレクトリの設定と確認]]
---
## まとめ
ggplot2 の流れはいつも同じです。
1. `ggplot(データ, aes(x = ..., y = ...))` で土台を作る
2. `+ geom_xxx()` で点や線を乗せる
3. `+ labs()` で名前を整える
4. `+ theme_xxx()` で見た目を整える
5. `p <-` に入れておけば、`p` を実行するたび同じ図が出る
軸を変えたいとき、色を分けたいとき、線を足したいとき、それぞれ独立に `+` でつなぐパーツを変えるだけです。最初は呪文に見えますが、Step 1〜7 のパターンが手に入れば、他の図にも応用が利きます。
---
## 関連記事
- [[R - ggplot2 のインストール]]
- [[R - ggplot2でフォレストプロットを作成する]]
- [[R - 散布図の各点にIDラベルを表示する]]
- [[R - Rプログラムをコピペして動かそう]]