Triad sou.

reorder 関数を使って横軸の順序の並べ替えを行う方法

ggplot2 で geom_bar(stat = "identity") を利用して棒グラフを作成するときに、横軸の順序を変える方法をまとめてみます。
特に要約データなどを持っていて、ヒストグラムをプロットしたい時などに利用できるかと思います。


方法としては、データフレームに横軸の順序を規定する変数を含めておき、aes コンポーネントreorder 関数を使うだけで好きな順序に変更することができます。

require(ggplot2)
d <- data.frame(
  x = c("80-", "90-", "100-", "110-", "120-", "130-", "140-", "150-", "160-", "170-", "180-"),
  y = c(0, 9, 35, 81, 194, 276, 271, 207, 138, 55, 59),
  z = seq(1, 11)
)
ggplot(d, aes(x = reorder(x, z), y = y)) +
  geom_bar(stat = "identity") +
  xlab("Systolic blood pressure [mmHg]") +
  ylab("Frequency") +
  theme_gray(20, "serif")


何でこんな方法が必要になるのかというと

ggplot(d, aes(x = x, y = y)) +
  geom_bar(stat = "identity") +
  xlab("Systolic blood pressure [mmHg]") +
  ylab("Frequency") +
  theme_gray(20, "serif")


ggplot2 がデータフレームを自動的にソートするので、軸ラベルがずれてしまう場合があります。

プロットしたデータ

厚生労働省. 第 5 次循環器疾患基礎結果の概要 [internet]. 2001 Jun. 6. [cited 2011 Jul. 1]. Available from: http://www.mhlw.go.jp/toukei/kouhyo/indexkk_18_1.html