見出し画像

R | ggplot | geom_bar | バーの間隔を空けたい

*ハイライト*
・棒グラフのバーの幅は変えることができる
・geom_bar(width = *)でバーの幅は変わる

install.packages("tidyverse") 
library(ggplot2)

df <- data.frame(
 subject = c("x1", "x2", "x3", "x4", "x5", "x6"),
 weight = c(45, 53, 56, 72, 65, 50))
head(df, 2)

g <- ggplot(df, aes(x = subject, y = weight, fill = subject))+
 geom_bar(stat = "identity",width = 0.5)
plot(g)

コードの説明

#パッケージのインストール

最初にパッケージをRにインストールしましょう。gglpot2tidyverseはパッケージに内包されているので,tidyverseをインストールし,ggplot2をライブラリーします。

install.packages("tidyverse") 
library(ggplot2)

#データフレームの作成

ggplotで棒グラフを作成するために被験者6人の体重を表しているデータフレームを作成します。subjectは「被験者」を,weightは「体重」を表しています。

df <- data.frame(
 subject = c("x1", "x2", "x3", "x4", "x5", "x6"),
 weight = c(45, 53, 56, 72, 65, 50))
head(df, 2)

  subject weight
1    x1   45
2    x2   53
:     :      :

#棒グラフの描画

ggplotで被験者をX軸に,体重をY軸にマッピングし,体重の値に従って棒グラフを作成します。まずggplotのなかに使用するデータフレーム,データセットの中の変数をX軸やY軸に割り当てます。今回は体重の値をそのまま表示させたいので,geom_bar()の中身をstat = "idenetity"にしました(1)。また棒グラフのバーに色をつけるために最初に指定したggplotのエステティックの部分にバーの塗りつぶしにfillを設定します。今回は被験者ごとに色分けをしたいので,fill = subjectとします。

g <- ggplot(df, aes(x = subject, y = weight, fill = subject))+ 
 geom_bar(stat = "identity") 
plot(g)

#バーの幅を変える

バーの幅を変えるためにgeom_bar()の中にwidthの値を指定します。

g <- ggplot(df, aes(x = subject, y = weight, fill = subject))+
geom_bar(stat = "identity", width = 0.5)
plot(g)

#エラーの出し方

geom_bar()のwidthの値を0より小さい,1よりも大きい値にすると,以下のエラーがでます。0よりも小さい場合にはバーの左右が反転して,0.1と同じ幅のバーが表示されます。1よりも大きい値にすると,バーは隣のバート重なってしまいます。

g <- ggplot(df, aes(x = subject, y = weight, fill = subject))+
 geom_bar(stat = "identity",width = -0.1)
plot(g)

g <- ggplot(df, aes(x = subject, y = weight, fill = subject))+
 geom_bar(stat = "identity",width = 1.1)
plot(g)

Warning message:
position_stack requires non-overlapping x intervals

■Rグラフィックスクックブック 2 ―ggplot2によるグラフ作成のレシピ集/Winston Chang (), 石井 弓美子 (翻訳), 河内 (翻訳), 瀬戸山 雅人 (翻訳)

改訂2 RユーザのためのRStudio[実践]入門〜tidyverseによるモダンな分析フローの世界/松村 優哉 (), 湯谷 啓明 (), 紀ノ定 保礼 (), 前田 和寛 ()

■Rが生産性を高める〜データ分析ワークフロー効率化の実践/igjit (), atusy (), hanaori ()

この記事が気に入ったらサポートをしてみませんか?