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")