Измените порядок дискретного масштаба x

Я делаю столбиковую диаграмму, которой избегают, с помощью ggplot с дискретным масштабом x, ось X теперь расположены в алфавитном порядке, но я должен перестроить его так, чтобы это было заказано значением оси y (т.е. самая высокая панель будет расположена слева).

Я попробовал порядок или вид, но результат в виде ось X, но не панели соответственно.

Что я сделал неправильно?

127
задан Henrik 21 November 2018 в 19:24
поделиться

2 ответа

Попробуйте вручную установить уровни фактора на оси x. Например:

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

ggplot of the cars dataset with factor levels automatically determined

# 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()

ggplot of the cars dataset with factor levels reordered manually

Как указал Джеймс в своем ответе, reorder - это идиоматический способ переупорядочить уровни факторов.

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

ggplot of the cars dataset with factor levels reordered using the reorder function

101
ответ дан 24 November 2019 в 00:42
поделиться

Вы можете использовать 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")

Я ожидал, что он будет иметь и отрицательную высоту, но этого не происходит, поэтому он работает!

38
ответ дан 24 November 2019 в 00:42
поделиться