Я делаю столбиковую диаграмму, которой избегают, с помощью 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()
Вы можете использовать reorder
:
qplot(reorder(factor(cyl),factor(cyl),length),data=mtcars,geom="bar")
Edit:
Чтобы самый высокий бар был слева, нужно использовать небольшую хитрость:
qplot(reorder(factor(cyl),factor(cyl),function(x) length(x)*-1),
data=mtcars,geom="bar")
Я ожидал, что он будет иметь и отрицательную высоту, но этого не происходит, поэтому он работает!