Q: 5 ggplot2で帯グラフを作る

5.1 Q

ggplot2で帯グラフを作成したいのですが、どうやったら描けるでしょうか?

5.2 A

以下の要素を組み合わせると帯グラフが描けます:

  1. 形状は棒グラフ(geom = "bar)
  2. y軸をフルに設定(position = "full)
  3. y軸をパーセンタイル標記に設定(scale_y_continuous(labels = percent))
  4. x軸とy軸を入れ替えて横棒グラフに設定(coord_flip())
  5. 項目順の調整 ※必要であれば

以下のコードから要素を追加していきます:

library(ggplot2)
p <- ggplot(mtcars, aes(x = as.factor(gear), fill = as.factor(vs))) +
  geom_bar()
p

5.2.1 y軸をフルに設定

y軸を、一端からもう一端へと引き伸ばすには、`position = “fill”を設定します:

p <- ggplot(mtcars, aes(x = as.factor(gear), fill = as.factor(vs))) +
  geom_bar(position = "fill")
p

このとき、y軸のメモリが0-1.00と比率へ自動的に変化していることに留意してください。

5.2.2 y軸をパーセンタイル標記に設定

{scale}パッケージを読み込んで、scale_y_continuous(labels=percent)の設定を追加します:

require(scales)
p <- ggplot(mtcars, aes(x = as.factor(gear), fill = as.factor(vs))) +
  geom_bar(position = "fill") +
  scale_y_continuous(labels = percent)
p

他にも方法はありますがこれが一番スムーズできれいにできます。{ggplot2}パッケージをインストールしているなら、{scales}はおそらくすでにインストールされています。

5.2.3 x軸とy軸を入れ替えて横棒グラフに設定

この方法については、ggplot2逆引き - ggplot2で縦軸と横軸をひっくり返したい - Qiitaを参照してください。

require(scales)
p <- ggplot(mtcars, aes(x = as.factor(gear), fill = as.factor(vs))) +
  geom_bar(position = "fill") +
  scale_y_continuous(labels = percent) +
  coord_flip()
p

5.2.4 項目順の調整

この方法については、ggplot2逆引き - x軸を並べ替えたい - Qiitaを参照してください。

require(scales)
mtcars.v2 <- transform(mtcars, gear2 = gear * -1)
p <- ggplot(mtcars.v2, aes(x = reorder(gear, gear2), fill = as.factor(vs))) +
  geom_bar(position = "fill") +
  scale_y_continuous(labels = percent) +
  coord_flip()
p

これで帯グラフの完成です。結構手間がかかります。