【R】ggplot2, 生データから平均値と標準偏差を算出して棒グラフを描画する (geom_bar, geom_errorbar)

#はじめに
Rstudio,ggplot2で棒グラフを書きます．
内容は主に生データからR上で平均値と標準偏差を算出するいう過程についてです．正直棒グラフならExcelでもすぐに作れますが，エラーバーの表示や統計検定の結果をグラフ中に反映させるという点ではRに軍配が上がりそうな気がします．

#生データから平均値と標準偏差を求める
irisのデータを使用していきます．ちなみにirisデータの内容はこんな感じ．3種のアヤメが50個ずつの計150行のデータです．

|     | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species    |
|-----|--------------|-------------|--------------|-------------|------------|
| 1   | 5.1          | 3.5         | 1.4          | 0.2         | setosa     |
| 2   | 4.9          | 3           | 1.4          | 0.2         | setosa     |
| 3   | 4.7          | 3.2         | 1.3          | 0.2         | setosa     |
| ..  | ...          | ...         | ...          | ...         | ......     |
| 51  | 7            | 3.2         | 4.7          | 1.4         | versicolor |
| 52  | 6.4          | 3.2         | 4.5          | 1.5         | versicolor |
| 53  | 6.9          | 3.1         | 4.9          | 1.5         | versicolor |
| ..  | ...          | ...         | ...          | ...         | ......     |
| 101 | 6.3          | 3.3         | 6            | 2.5         | virginica  |
| ..  | ...          | ...         | ...          | ...         | ......     |
| 150 | 5.9          | 3           | 5.1          | 1.8         | virginica  |

ここでは便宜上変数”rawdata”にirisのデータフレームを代入しておきます．

```R
rawdata <- iris
```

実際には使用したいデータのcsvを

```R
rawdata <- read.csv("XXX.csv")
```

の様な感じで読み込んで使うかと思います．


棒グラフにするにあたって，平均値とエラーバーのための標準偏差が必要です．例として，Sepal.LengthのSpeciesごとの平均値と標準偏差を変数"data"に代入します．

Speciesごとにまとめるためのgroup_by, 平均値と標準偏差を算出するsummariseは**dplyr**パッケージに入っているので読み込んでおきましょう．

※パイプ演算子"%>%"についての説明は割愛します．

```R
library(dplyr) #dplyrの読み込み

data <- 
  rawdata %>% #対象となるデータ
  group_by(Species) %>% #group_byでSpeciesごとにする
  summarise(mean = mean(Sepal.Length), sd = sd(Sepal.Length)) #SpeciesごとのSepal.Lengthの平均と標準偏差を求める
```

dataにはこのような結果が返ってきます．

|   | Species    | mean  | sd                |
|---|------------|-------|-------------------|
| 1 | setosa     | 5.006 | 0.352489687213451 |
| 2 | versicolor | 5.936 | 0.516171147063863 |
| 3 | virginica  | 6.588 | 0.635879593274432 |

これで棒グラフが描けそうですね．
ようはExcelでaverage関数とstdev関数を使ったのと同じです．

#グラフ描画
###棒グラフ表示（geom_bar)
いよいよグラフの描画です．
**ggplot2**パッケージを読み込んでおきましょう．

```R
library(ggplot2) #ggplot2の読み込み

ggplot(data, #使用するデータ
       aes(y=mean, x=Species,fill=Species) #グラフのx,yの指定，fillは色の塗り分け．今回はSpeciesで塗り分けたい
  )+
  geom_bar(stat = "identity", width = 0.6  #geom_barで棒グラフとなる
  )
```

こんな感じです．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570280/f5caa57d-658b-4290-cad7-cb7596db61a7.png" width=70%>
デフォルトではこんな感じの色になるので任意の色への塗り替えと，エラーバーを付けていきましょう．

###エラーバー表示 (geom_errorbar)
```R
ggplot(data, #使用するデータ
       aes(y=mean,x=Species,fill=Species) #グラフのx,yの指定，fillは色の塗り分け．今回はSpeciesで塗り分けたい
  )+
  geom_bar(stat = "identity",
           width = 0.6  #geom_barで棒グラフとなる
  )+
  scale_fill_manual(values = c("#999999", "darkorange", "gold") #色をRGBで設定できる
  )+
  geom_errorbar(aes(ymax = mean + sd, ymin = mean - sd), # geom_errorbarでエラーバー追加
                width = 0.2,  # 横棒の長さ
                size = 1.5 # 線の太さ
  ) 
  ```
こんな感じです．変数"data"に代入したsdカラムの数値が反映されています．色は適当ですのでここを好みの色に変えればOK．
エラーバーの太さや横棒の長さなんかも変えられます．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570280/6b0f2c00-c2fc-7da7-5fe4-37bb58bf78a2.png" width=70%>

※使用コード

https://github.com/tonegawa07/Qiita_R/blob/master/qiita_1.R