見出し画像

R|ggplot2で棒グラフを描く

* Rのggplot力をあげたいシリーズ第2弾 *
(ggplot2の基本についてはこちらを見てね)

この記事でわかること

1.  基本の棒グラフの描画
2.  積み上げて描画する
3.  グループ化して描画する

1. 基本の棒グラフの描画

画像1

棒グラフを描くにはグラフの種類の部分に geom_bar を指定します。
今回は『異なるエサで飼育されたヒナの体重の推移』のデータを使っていきます。

> data(ChickWeight)

> head(ChickWeight)
  weight Time Chick Diet
1     42    0     1    1
2     51    2     1    1
3     59    4     1    1
4     64    6     1    1
5     76    8     1    1
6     93   10     1    1

1.1. 行数(ケース数)での描画

行の数をy軸にとって描画してみましょう。
これはエサの種類をx軸に、y軸をサンプル数としています。

> ggplot(ChickWeight, aes(x = Diet)) + geom_bar()

画像2

1.2. 列の値での描画

次は行の値を参照して棒グラフを表現します。
1.1 とは違いx軸が雛が生まれてからの経過時間、y軸がその時点の体重です。

> cw <- ChickWeight[ChickWeight$Diet == 1,]  # エサの種類が1のデータのみを使う
> ggplot(cw, aes(x = Time, y = weight)) + geom_bar(stat = "identity")

画像3

stat = "identity" ・・・ x位置の時点でのy軸に指定したデータをそのまま使う
stat = "count" ・・・ geom_barの引数にstatを設定しない場合、デフォルトでこちらが採用される。x位置ごとのケースの数を数える

1.3 色をつける

塗りつぶしの色は fill 、枠線の色は colour で指定します。
colorと書いても内部で変換されるため大丈夫ですが、基本はイギリスの綴りが採用されるようです。
(ggplot2を作成したハドリー・ウィッカム氏はニュージーランド出身。ニュージーランドの英語はイギリス式のためイギリスの綴りが正式となっているのかなと思います。)

> ggplot(ChickWeight, aes(x = Diet)) + geom_bar(fill = "pink", colour = "black")

画像4

2. 積み上げて描画する

2.1 基本

1つの棒にエサ1,エサ2...を食べた雛の体重を積み上げ、日数ごとに並べたグラフを描いていきます。

> ggplot(ChickWeight, aes(x = Time, y = weight, fill = Diet)) + geom_bar(stat = "identity")

画像5

2.2 縦軸が100%となるように描画

それぞれの積み上げ棒グラフの縦軸が100%になるように積み上げたときの各エサの割合を出してみます。
position = fill は棒を積み重ね、各棒を同じ高さにすることで、x位置における相対的な各グループの割合を見ることができます。
scale_y_continuouslabels を指定して縦軸を%表記に変更しています。

> ggplot(ChickWeight, aes(x=Time, y=weight, fill=Diet)) + geom_bar(stat = "identity", position = "fill") + scale_y_continuous(labels = scales::percent)

画像6

3. グループ化して描画する

x軸が雛が生まれてからの経過時間、y軸がその時点の体重です。
今回は経過時間をグループ化し、エサごとにどれだけ体重が違うのかを可視化していきます。
fill にグルーピングしたい変数、positiondodge を指定します。
dodge を指定することで縦に積み重ねられずに横に避けて描画されるようになります。

> ggplot(ChickWeight, aes(x = Time, y = weight, fill = Diet)) + geom_bar(position = "dodge", stat = "identity")

画像7


今回は棒グラフの描画について見てきました。
次回は箱ひげ図の描画に取り組むよてい。

統計の本、もしくはわんこにおいしいお菓子を買うのに使わせていただきます( *ˆoˆ* )