Rで「あてはめ」ができるまでの道筋　ggplot2　②

# ggplot②
さて、ggplot2 の第2回です。今回はグラフの修飾やラベル、タイトルなどの書き方から配色に至るまでを説明してきます。今回も[Dr.Greg Martin](https://www.youtube.com/@RProgramming101/playlists)の動画で勉強したことが中心です。

# themeレイヤ
復習ですが、以下のようにggplotレイヤ + geometryレイヤ が揃っていれば、とりあえずグラフは描けるのでした。以下ではデータセットBOD を用いますが、BOD はRの組み込みのデータセットなので、ダウンロードすることなく利用することができます。
```R
BOD %>%
ggplot(aes(Time, demand)) + 
	geom_point(size = 5)
```
そこにテーマ(themeレイヤ)を付け加えたいと思います。
まずはtheme_bwレイヤです。
```R
BOD %>%
ggplot(aes(Time, demand)) + 
	geom_point(size = 5) + 
	theme_bw()
```
結果を示します。上がtheme_bw()なし(つまりデフォルト、theme_gray)、下がtheme_bw()ありです。

![1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/8e9fad00-e7dc-28ca-6477-b8a649603468.png)
![2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/3c719648-5c7e-5d69-7a2b-7d23a8005f5f.png)

このようにthemeレイヤは背景色を変更するなどして、全体の雰囲気を変える役割を果たします。
themeレイヤにはtheme_bw()の他にも
<ul><li>theme_gray() (デフォルト)
<li>theme_dark()
<li>theme_classic()
<li>theme_light()
<li>theme_linedraw()
<li>theme_minimal()
<li>theme_void()</ul>
があります。
以下、一通り試してみました


theme_classic()です(↓)
<img width="400" alt="classic" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/a6b02379-a335-8be4-0e63-5aa4251e27e6.png">
theme_dark()です(↓)
<img width="400" alt="dark" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/d601a6f1-10bb-4d9f-e651-d3474876d295.png">
theme_light()です(↓)
<img width="400" alt="light" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/611f959b-7045-a580-9633-a3ed3d123e07.png">
theme_lightdraw()です(↓)
<img width="400" alt="lightdraw" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/16f753b2-b40b-2b22-fce6-cb821307d808.png">
theme_minimal()です(↓)
<img width="400" alt="minimal" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/7d9f58ed-4c2c-196b-c759-2489895674c1.png">
theme_void()です(↓)
<img width="400" alt="void" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/d4498525-1734-11f5-0caf-dbc1fa88a704.png">

詳しくは[公式チートシート](https://github.com/tidyverse/ggplot2/tree/main#cheatsheet)を参照してください。

## ラベル
続いてラベルです。labsレイヤでx軸、y軸の変数についての説明、およびグラフについての説明を加えます。
```R
BOD %>%
ggplot(aes(Time, demand)) + 
	geom_point(size = 5) + 
	labs(x = "Time", y = "demand", title="BOD" )
```
![2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/5cbbb45e-3274-f8c8-67d5-d67802bc89fc.png)
少し文字が小さいですね。文字の大きさを変えるには、以下のようにthemeレイヤで大きさを指定します。
```R
BOD %>%
ggplot(aes(Time, demand)) + 
	geom_point(size = 5) + 
	theme_gray(base_size=20) + 
	labs(x = "Time", y = "demand", title="BOD")
```
以下の通りです。上図と見比べてみてください。ラベルだけではなく、すべての文字が大きくなっています。
![2-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/2cc3d002-fda6-741e-7eeb-f2fb74a45837.png)


## 配色
### 手動で配色
次に配色です。点や曲線、ビンなどの色を個別に指定して色付けする方法を考えてみましょう。
まず、上記の散布図に色をつけてみます。
```R
BOD %>%
ggplot(aes(Time, demand)) + 
	geom_point(size = 5, color="red", alpha=0.5) +
	theme_minimal()
```
こんな感じです。
![2-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/1d0cb22a-ac16-fac1-b5df-dfc202a51a4e.png)
色が濃すぎて見にくい場合、アルファ値を設定して、透明化することもできます。
アルファ値とは不透明度です。0〜1 の値を取り、0が完全透明、1が完全不透明です。
```R
BOD %>%
ggplot(aes(Time, demand)) + 
	geom_point(size = 5, color="red", alpha=0.5) +
	theme_minimal()	
```
![2-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/2eb2277d-36a8-6e6e-d59a-793d4f81db61.png)

### color とfill
説明のため、以下のような適当なデータのヒストグラムを描いてみたいと思います。
```R
d <- c(1, 3, 3, 1, 2, 4, 2, 2, 2)
```
ggplot2に代入するために、data.frame に変換しておきます。
```R
ddf <- as.data.frame(d)
```
このデータのヒストグラムです。カラーコードを2つ指定していることに注意してください。
```R
ddf %>%
	ggplot(aes(d)) + 
	geom_histogram(binwidth=1, color="#3E9DA5", fill="#FADA0A")
```
![2-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/d3f3d55c-c361-2250-a9f7-ef9777e64136.png)

ここで、color="#3E9DA5" は枠線の色、fill="#FADA0A" はビンの内部の色を指定しています。
この例に限らず、「colorは線、fillは内部」と覚えておくと応用が効くでしょう。

### palette を利用
さて、ここからは個別の色付けではなく、palette を用いて体系的に色付けすることを考えます。

ここではbuilt-in データのmpg を用います。このデータセットについて軽く説明しておきます。data() の説明によると"Fuel economy data from 1999 to 2008 for 38 popular models of cars"とあります。すなわち1999年から2008年の10年間の人気38車種の燃費データです。最初の数行を表示すると以下の通りです。

```R
> head(mpg)
# A tibble: 6 × 11
  manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class  
  <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compact
2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compact
3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compact
4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compact
5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compact
6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compact
```
ご覧の通りたくさんの列がありますが、この中でdispl(排気量)、drv(駆動輪)を説明変数として、目的変数hwy(高速道路での燃費)を説明するグラフを作ることを試みます。すると、説明変数が2つあるため、横軸だけでは表現しきれません。そこで、displを横軸にして、drvの違いは点の色で表現していこうと思います。

まずは、デフォルトの設定から。
```R
mpg %>%
	ggplot(aes(displ, hwy, color=drv))	+
	geom_jitter(size=5) + 
	theme_minimal()
```
![2-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/37741f82-8ed0-4dd5-36ff-5f8619eaab1a.png)

これでも十分に表現できているのですが、もし好みに合わなければ色を変えることができます。たとえば"YlOrRd"というパレットを利用するなら、以下のようにします。(このパレット、おそらくですが<B>Y</B>e<B>l</B>low-<B>Or</B>ange-<B>R</B>e<B>d</B>の意味と思われます)
```R
mpg %>%
	ggplot(aes(displ, hwy, color=drv))	+
	geom_jitter(size=5) + 
	scale_color_brewer(palette = "YlOrRd") +
	theme_minimal()
```
![2-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530897/044e37e1-1f4d-c2ec-4291-71c1a4b598e0.png)

パレットはその他にもたくさんあります。
以下でご確認ください。
```R
> library(RColorBrewer)
> display.brewer.all(colorblindFriendly=TRUE)
```
ここではscale_color_brewer()を用いましたが、同様の以下の関数があります。
線の色を変えるには
<ul><li> scale_color_brewer()
<li> scale_color_manual()</ul>

領域の色を変えるには
<ul><li> scale_fill_brewer()
<li> scale_fill_manual()</ul>

前項の「color とfill」を応用すれば理解しやすいですね。

## 参考文献
[Data visualisation using ggplot with R Programming](https://www.youtube.com/@RProgramming101/playlists) : Dr.Greg Martin の動画
[Cheatsheet](https://github.com/tidyverse/ggplot2/tree/main#cheatsheet) : (公式)チートシートです。

トップページは[こちら](https://qiita.com/sflabtech/items/562dd78418926f00a0d5)