## はじめに 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プログラムをコピペして動かそう]]