1. ホーム
  2. r

[解決済み] 離散的な順序 x 頻度/値によるスケール

2022-05-03 08:30:39

質問

ggplotを使って、xスケールが離散的な棒グラフを作っているのですが、x軸は現在アルファベット順に並んでいますが、y軸の値で並ぶように(つまり、一番高い棒を左に配置するように)並べ替えたいのですが、どうしたらいいですか?

注文やソートを試してみましたが、X軸はソートされますが、バーがソートされません。

何がいけなかったのでしょうか?

どうすればいいですか?

X軸の因子のレベルを手動で設定してみてください。 例えば

library(ggplot2)
# Automatic levels
ggplot(mtcars, aes(factor(cyl))) + geom_bar()    

<イグ

# Manual levels
cyl_table <- table(mtcars$cyl)
cyl_levels <- names(cyl_table)[order(cyl_table)]
mtcars$cyl2 <- factor(mtcars$cyl, levels = cyl_levels)
# Just to be clear, the above line is no different than:
# mtcars$cyl2 <- factor(mtcars$cyl, levels = c("6","4","8"))
# You can manually set the levels in whatever order you please. 
ggplot(mtcars, aes(cyl2)) + geom_bar()

<イグ

ジェームズの回答で指摘されているように reorder は、因子レベルの順序を変更する慣用的な方法です。

mtcars$cyl3 <- with(mtcars, reorder(cyl, cyl, function(x) -length(x)))
ggplot(mtcars, aes(cyl3)) + geom_bar()

<イグ