Rで解析:ggplot2のgeom_barコマンドで棒グラフ


投稿日: Rの解析に役に立つ記事

「ggplot2」パッケージのgeom_barコマンドを利用した1変数、2変数の棒グラフ、積み上げグラフ作成例の紹介です。

参考:手軽で綺麗なグラフが欲しいなら、ggplot2のまとめです。
https://www.karada-good.net/analyticsr/r-78/

「ggplot2」パッケージを含むtidyverseパッケージのバージョンは1.3.1。実行コマンドはwindows 11のR version 4.1.2で確認しています。

実行コマンド

詳細はコメント、コマンドのヘルプを確認してください。

#ggplot2を含むtidyverseパッケージの読み込み
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}

###データ例の作成#####
set.seed(1234)
n <- 1000
TestData <- tibble(Group = sample(paste0("Group ", 1:5), n, replace = TRUE),
                   ABCData = sample(c("A", "B", "C"), n, replace = TRUE),
                   Data1 = sample(0:26, n, replace = TRUE),
                   Data2 = rnorm(n))
#データの確認
TestData
# A tibble: 1,000 x 4
 Group   ABCData Data1  Data2
 <chr>   <chr>   <int>  <dbl>
1 Group 4 C          10 -1.93 
2 Group 2 B           2  2.43 
3 Group 5 A          13  1.41 
4 Group 4 B          11  0.634
5 Group 1 A          22  1.12 
6 Group 5 A           8  1.04 
7 Group 4 A          12  0.859
8 Group 2 C          19  0.942
9 Group 2 A          14  1.06 
10 Group 4 C          14 -0.690
# ... with 990 more rows
########

#色の設定
colos <- c("#4b61ba", "#d9bb9c", "#505457", "#deb7a0", "#a87963")

#棒グラフ:geom_barコマンド
#1変数でプロット
ggplot(TestData, aes(x = Group)) +
  geom_bar(aes(fill = Group)) +
  scale_fill_manual(values = colos)

#棒グラフ:geom_bar + stat_summaryコマンド
#平均でプロット
ggplot(TestData, aes(x = Group, y = Data1)) +
  stat_summary(aes(fill = Group), fun = "mean", geom = "bar") +
  scale_fill_manual(values = colos)
#数値の確認
TestData %>%
  group_by(Group) %>%
  summarise(mean = mean(Data1))
# A tibble: 5 x 2
 Group    mean
 <chr>   <dbl>
1 Group 1  13.6
2 Group 2  13.8
3 Group 3  13.2
4 Group 4  13  
5 Group 5  13.3

#1変数で積み上げグラフ:geom_barコマンド
ggplot(TestData, aes(x = Group)) +
  geom_bar(aes(fill = ABCData)) +
  scale_fill_manual(values = colos)

#2変数で積み上げグラフ:geom_bar + stat_summaryコマンド
#positionオプションにstackを設定,dodgeにすると横に並べる
#平均でプロット
ggplot(TestData, aes(x = Group, y = Data1)) +
  stat_summary(aes(fill = ABCData), fun = "mean", geom = "bar", position = "stack") +
  scale_fill_manual(values = colos)
#数値の確認
TestData %>%
  group_by(Group, ABCData) %>%
  summarise(mean = mean(Data1))
# A tibble: 15 x 3
# Groups:   Group [5]
Group   ABCData  mean
<chr>   <chr>   <dbl>
1 Group 1 A        13.1
2 Group 1 B        13.5
3 Group 1 C        12.3
4 Group 2 A        12.7
5 Group 2 B        11.9
6 Group 2 C        14.2
7 Group 3 A        12.8
8 Group 3 B        14.8
9 Group 3 C        12.0
10 Group 4 A        12.2
11 Group 4 B        13.2
12 Group 4 C        13.2
13 Group 5 A        14.1
14 Group 5 B        13.3
15 Group 5 C        12.5

#stat_summaryのpositionにdodgeを設定した応用
#グラフを横向きにしてエラーバーを追加
ggplot(TestData, aes(x = Group, y = Data1, fill = ABCData)) +
  stat_summary(color = "red", fun.data = "mean_se",
               geom = "errorbar", position = "dodge") +
  stat_summary(fun = "mean", geom = "bar", position = "dodge") +
  scale_fill_manual(values = colos) +
  coord_flip()

出力例

・1変数でプロット
Group数のカウント

・geom_bar + stat_summaryコマンド
Group毎のData1の平均

・1変数で積み上げグラフ

・2変数で積み上げグラフ

・stat_summaryのpositionにdodgeを設定した応用


少しでも、あなたの解析が楽になりますように!!

スポンサードリンク

スポンサードリンク