ggplot2, geom_bar, dodge, порядок баров

Я хотел бы заказать бары в Dodge geom_bar, Вы знаете, как с этим бороться?

Мой код:

ttt <- data.frame(typ=rep(c("main", "boks", "cuk"), 2),
                  klaster=rep(c("1", "2"), 3),
                  ile=c(5, 4, 6, 1, 8, 7))

ggplot()+
    geom_bar(data=ttt, aes(x=klaster, y=ile, fill=typ),
             stat="identity", color="black", position="dodge")

И примеры графиков, чтобы лучше понять проблему:

Что я имею:

Что бы я хотел иметь:

1 ответ

Решение

Один из вариантов - создать новую переменную для представления порядка, в котором столбцы должны быть в каждой группе, и добавить эту переменную в качестве group аргумент в вашем сюжете.

Множество способов для этой задачи создания переменной, вот способ использования функции из dplyr. Новая переменная основана на рейтинге ile в порядке убывания в каждом klaster группа. Если у вас есть связи в какой-либо группе, вы захотите выяснить, что вы хотите сделать в этом случае (в каком порядке должны быть бары в данных связях?). Вы можете установить ties.method аргумент в rank от значения по умолчанию, вероятно, "first" или же "random",

library(dplyr)
ttt = ttt %>% 
    group_by(klaster) %>% 
    mutate(position = rank(-ile))
ttt
Source: local data frame [6 x 5]
Groups: klaster [2]

     typ klaster   ile  rank position
  (fctr)  (fctr) (dbl) (dbl)    (dbl)
1   main       1     5     3        3
2   boks       2     4     2        2
3    cuk       1     6     2        2
4   main       2     1     3        3
5   boks       1     8     1        1
6    cuk       2     7     1        1

Теперь просто добавьте group = position в код вашего сюжета.

ggplot() +
    geom_bar(data=ttt, aes(x=klaster, y=ile, fill=typ, group = position),
                     stat="identity", color="black", position="dodge")

Другие вопросы по тегам