2015-07-24 2 views
0

Итак, я делаю несколько нисходящих упорядоченных штрих-кодов в R, используя ggplot. Каждый из этих графиков содержит один бар под названием «другие», который всегда должен быть последним. Как реализовать это оптимально? В более общем плане: есть ли простая возможность выбрать одну полосу штрихового графика и переместить ее в последнюю позицию без ручного изменения всех уровней.R ggplot определенный порядок баров

Большое спасибо заранее, Крис

+0

Нету , Заказ уровней - это то, как вы это делаете. Могут быть более/менее умные способы обработки заказов факторов, но с этим невозможно помочь, учитывая, как мало информации вы предоставили. – joran

+0

Спасибо за быстрый ответ. – chris17

ответ

1

Хитрость заключается в том, чтобы использовать фактор, как следует

library(ggplot2) # for plots 
# dummy data 
dat <- data.frame(
    letters = c("A","B","Other","X","Y","Z"), 
    probs = sample(runif(6)*10,6) 
) 

# not what we want 
ggplot(dat, aes(letters, probs)) + geom_bar(stat = "identity") 

# magic happens here 
# factor, and push Other to end of levels using c(others, other) 
dat$letters <- factor(
    dat$letters, 
    levels = c(
    levels(dat$letters)[!levels(dat$letters) == "Other"], 
    "Other") 
) 

ggplot(dat, aes(letters, probs)) + geom_bar(stat = "identity") 

Если вы используете + coord_flip(), используйте levels = rev(c(...)) для интуитивного заказа

dat$letters <- factor(
    dat$letters, 
    levels = rev(c(
    levels(dat$letters)[!levels(dat$letters) == "Other"], 
    "Other")) 
) 

ggplot(dat, aes(letters, probs)) + geom_bar(stat = "identity") + coord_flip() 
+0

Большое спасибо за эту отличную помощь! – chris17

Смежные вопросы