1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-09-16

#はじめに
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のデータフレームを代入しておきます.

rawdata <- iris

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

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

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

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

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

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

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パッケージを読み込んでおきましょう.

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で棒グラフとなる
  )

こんな感じです.

デフォルトではこんな感じの色になるので任意の色への塗り替えと,エラーバーを付けていきましょう.

###エラーバー表示 (geom_errorbar)

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.
エラーバーの太さや横棒の長さなんかも変えられます.

※使用コード

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?