fruits <- c("apple","durian","orange")
count <- c(2, 1, 3)
df <- data.frame(fruits, count)
df # 中身の確認
fruits count
1 apple 2
2 durian 1
3 orange 3
このデータを使って、ggplotで棒グラフを描いてみると、
library(ggplot2)
ggplot(df, aes(x=fruits, y=count))
+ geom_bar(stat="identity")
並び順はデータのまま |
当然ながら、棒の順番はデータ通りに、2、1、3と並びますね。
これをソートしたい場合は、reorderを使います↓
ggplot(df, aes(x=reorder(fruits, count), y=count)) +
geom_bar(stat="identity")
reorderすると昇順に並ぶ |
x軸はfruitsなんだけど、reorder関数の第二引数であるcountの値で並べ替えてから使ってね、という指定です。
で、次の課題です。
reorderを使うと、昇順で1、2、3という並びになりましたが、これを降順の3、2,1という並びにしたいときは、どうやればいいか。
データフレームをソートするときなんかに使うorder関数でいうところの「decreasing=TRUE」みたいな指定があればいいのですが、reorder関数にはそのようなオプションはなさそうです。
で、実はごく簡単で、reorderの第二引数(count)の値の正負が逆になれば、順番も逆になるじゃんという理屈です。
ggplot(df, aes(x=reorder(fruits, -count), y=count)) +
geom_bar(stat="identity")
reorder関数の第二引数にマイナスをつければ降順にできる |
無事、降順に並んでくれました。