本ページはプロモーションが含まれています

広告 R グラフ化

R | ggplot2で棒グラフにエラーバーを入れる方法

本記事ではggplot2で作った棒グラフにエラーバーを入れる方法について解説しています。

棒グラフの基本的な作成方法についてはこちらをご参照ください。

基本編はこちら

本記事の内容

この記事では以下の内容について解説しています。

本記事で使うRパッケージと使用するデータセット

本記事では、以下のパッケージを使用します。

・tidyverse:ggplot2が入ったパッケージなので必須

・ggpubr
:平均値±標準偏差のエラーバーをつける時にあると便利

インストールしていないパッケージについてはインストールし、その後ロードしてください。

# ggpubrをインストールしていなければインストール
install.packages("ggpubr") 

# パッケージをロードする
library(tidyverse)
library(ggpubr)

Rのオススメ本

tidyverseパッケージを使ったオススメの実践入門書を紹介します。データの前処理や分析、可視化(ggplot2)が学べるのでとてもオススメ!
Rを使ってもっとデータ分析をしてみたい!と思わせてくれる一冊です。

使用するデータセット

使用するデータセットは前回のggplot2で棒グラフを作る方法(基礎編)に引き続きmpgデータセットを使います。

head(mpg)

> 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

解説に使用する基本グラフについて

今回は、mpgデータセットのclass(車種)ごとのdispl(排気量)の平均値の棒グラフをもとに解説していきます。そのため、この基本グラフをオブジェクトgとして保存しておきます。
基本の棒グラフの書き方はこちらをご確認ください。

# 以下のグラフをオブジェクトgとする
g <- ggplot(mpg,
        aes(x = class,
            y = displ))+
  stat_summary(geom = "bar",
               fun = "mean")
g
基本グラフg

この基本グラフgに、エラーバーを継ぎ足していきます。
前置きが長くなりましたが、棒グラフにエラーバーをつけていきましょう!

棒グラフにエラーバーを入れる (stat_summary())

エラーバーとしては、

 ・標準誤差(SE)
 ・標準偏差(SD)
 ・最大/最小(max/min)


の3パターンがあると思いますので、それぞれについて説明していきます。

標準誤差のエラーバーを入れる方法

エラーバーとして標準誤差を入れる場合は、stat_summary()を使用します。

# 基本グラフgに、標準誤差のエラーバーを入れる
g +
  stat_summary(geom = "errorbar",
                 fun.data = "mean_se",
                 width = 0.1)
標準誤差のエラーバーを追加

・geom = "errorbar"でエラーバーを入れる
・fun.data = "mean_se"で平均±標準誤差のエラーバーとする
・widthはエラーバーの横棒の長さを指定

という構造になっています。シンプルでわかりやすい気がします。

mean_se関数について

"mean_se"は平均値(y)、平均-標準誤差(ymim)、平均値+標準誤差(ymax)を算出する関数です。試しにmean_se関数を使ってみましょう。

mpg %>%  #mpgデータセットの
  group_by(class) %>%  # classごとの 
  summarise(mean_se(displ)) # displにmean_se関数を適用する

> mpg %>% 
+   group_by(class) %>% 
+   summarise(mean_se(displ))
# A tibble: 7 × 4
  class          y  ymin  ymax
  <chr>      <dbl> <dbl> <dbl>
1 2seater     6.16  5.92  6.40
2 compact     2.33  2.26  2.39
3 midsize     2.92  2.81  3.03
4 minivan     3.39  3.25  3.53
5 pickup      4.42  4.27  4.56
6 subcompact  2.66  2.47  2.85
7 suv         4.46  4.32  4.59

classごとの平均値(y)、平均-標準誤差(ymim)、平均値+標準誤差(ymax)が算出されました。

エクセルの場合、classごとに平均値、標準誤差などをそれぞれ算出しないといけないので手間がかかりますが、Rだったら簡単に求められる&グラフ化できるのでとってもラクにできます。

標準偏差のエラーバーを入れる方法

標準偏差も、標準誤差と同じようにstat_summary()でエラーバーを入れます。

標準誤差ではmean_seでしたが、標準偏差ではmean_sdを使用します。
mean_sdはggpubrパッケージに入っているため、ggpubrをロードしていないと使えないので注意してください。

g + 
  stat_summary(geom = "errorbar",
                 fun.data = "mean_sd",
                 width = 0.1)+
  labs(subtitle  = "(a) 1SD") # グラフにサブタイトルを入れる
標準偏差のエラーバーを追加

標準偏差*2 (2SD)にしたい場合

標準偏差*2(2SD)とかにしたい場合は、以下の方法で2SDにすることができます。
以下の方法であればmean_sdを使わずに1SDのエラーバーを入れることも可能です。

g + 
  stat_summary(geom = "errorbar",
                 fun.max = function(x)mean(x)+sd(x)*2,
                 fun.min = function(x)mean(x)-sd(x)*2,
                 width = 0.1)+
  labs(subtitle = "(c) 2SD")

上記のコードで1SDのエラーバーを入れる場合は、*2の部分を消してくださいね。

2*標準偏差(2SD)のエラーバーを追加

mean_sd関数について

"mean_sd"も先ほどのmean_seと同じで、平均値(y)、平均-標準偏差(ymim)、平均値+標準偏差(ymax)を算出する関数です。試しにmean_sd関数を使ってみましょう。

mpg %>% 
  group_by(class) %>%   # classごとの
  summarise(mean_sd(displ)) # displにmean_sd関数を適用する


> mpg %>% 
+   group_by(class) %>% 
+   summarise(mean_sd(displ)) 
# A tibble: 7 × 4
  class          y  ymin  ymax
  <chr>      <dbl> <dbl> <dbl>
1 2seater     6.16  5.63  6.69
2 compact     2.33  1.87  2.78
3 midsize     2.92  2.20  3.64
4 minivan     3.39  2.94  3.84
5 pickup      4.42  3.59  5.25
6 subcompact  2.66  1.56  3.76
7 suv         4.46  3.39  5.52

classごとの平均値(y)、平均-標準偏差(ymim)、平均値+標準偏差(ymax)が算出されました。上記の計算結果を1SDのグラフのエラーバーと見比べてみると、もちろん一致していますね。

最大/最小のエラーバーを入れる

最後に、max/minのエラーバーについてです。
先ほどまではgeom = "errorbar"を使いましたが、今回はgeom = "pointrange"を使ってみます。geom = "pointrange"はstat_summaryのデフォルトなので省略することも可能です。

g +
  stat_summary(geom = "pointrange",
               fun = "mean",
               fun.max = "max",
               fun.min = "min")
max/minのエラーバーを追加

・geom = "pointrange" :丸付きのレンジにする
・fun = "mean" :レンジの丸プロットを平均値に設定
・fun.max = "max" : レンジの上限を最大値に設定
・fun.min = "min" : レンジの下限を最小値に設定

というコードになっています。

今回はfun  = "mean"としましたが、もちろんmedianにもできます。

g + 
  stat_summary(geom = "pointrange",
               fun = "median",
               fun.max = "max",
               fun.min = "min")+
  labs(title = "プロットはMedian")
プロットはMedian。情報が多すぎる

意味わかんないグラフですが、ほんのご参考ですのでご容赦ください。

ここまでで標準誤差、標準偏差、最大/最小のエラーバーを入れる方法を解説しました。
ここからは、エラーバーの見た目の変え方について説明していきます。

\ オンラインでR言語を勉強するならUdemy /

UdemyのR講座を見てみる

エラーバーの見た目を変える(色、幅、位置)

エラーバーの色(color)幅(width)位置(position)を変えたい場合は、以下のようなコードになります。

g +
  stat_summary(geom = "errorbar",
               fun.data = "mean_se",
               width = 0.3,
               color = "red",
               position = position_nudge(x = 0.3))
エラーバーの色、幅、位置を変更

それぞれの引数で、

・color:エラーバーの色
・width:エラーバーの幅(width = 0でただの線になります)
・position = position_nudge:エラーバーの位置

をそれぞれ設定することができます。エラーバーの位置を変えることってあるのかな?

geom = "pointrange"の見た目変更

pointrangeは見た目をいろいろ変えることができます。
あまり需要はないと思いますが、他のグラフで見た目を変える時も基本的に使う引数は同じなので参考になるかもしれません。

g +
  stat_summary(geom = "pointrange",
               fun = "mean",
               fun.max = "max",
               fun.min = "min",
               shape = 21,
               size = 0.4,
               color = "black",
               fill = "red",
               linetype = "dashed")

・shape:プロットの形
・size:プロットやバーの太さ変更
・color : プロットの色変更
・fill :(プロットのshapeが中抜きの場合)塗りつぶしの色変更
・linetype : バーの線の種類変更

上記の設定ができます。

shapeについて

Rでは、それぞれのshapeに以下の番号が割り当てられています。

shapeの番号。Rのチートシートより

fillで塗りつぶし設定をしたい場合、shapeが21~25の中抜きshapeでないと塗りつぶしされません。

linetypeについて

linetypeは線の種類です。以下のような線に変えることができ、それぞれ数字もしくは文字列で設定します。

0 = "blank"(線なし)
1 = "solid"(直線)
2 = "dashed"(破線)
3 = "dotted"(点線)
4 = "dotdash"(点線と破線の組み合わせ)
5 = "longdash"(長めの破線)
6 = "twodash"(dotdashのちょっと長い版)

まとめ:ggplot2のエラーバーはstat_summary()で!

今回は棒グラフにエラーバーを入れる方法について解説しました!前回の棒グラフの作成方法今回のエラーバーを入れる方法について知っていれば、だいたいの棒グラフは書けると思います。

次回は、さらに欲張りな人向けに棒グラフにプロットを入れる方法について説明します。

R言語の勉強におすすめの本

今後Rの勉強をしていきたい!という方に、こちらの参考書がおすすめです。
特に、RユーザのためのRStudio実践入門は、tidyverseパッケージに特化して書かれていてとても実用的でしたのでオススメです。私自身、この本を読んでRで出来ることが一気に増えた実感のある本です。kindleで試し読みもできるのでぜひ参考にしてください。

  • この記事を書いた人

かにさん

めんどくさがり日本代表のワーママ。
住んでいる自治体の認可保育料が高いことをキッカケに、全国の保育料まとめブログを書き始めました。
趣味
ブログ執筆、海外ドラマ(刑事モノ)、投資、
面倒なことをいかに楽にこなすか考えること

-R, グラフ化