Вы можете уклоняться от очков так же, как вы уклоняетесь от баров, используя position=position_dodge()
. Однако вам нужно добавить аргумент width
, указывающий, сколько «уклоняться». Значение 1 должно соответствовать пунктирным столбикам. У вас также есть неизвестная «голубая» категория в легенде. Это связано с тем, что аргумент fill
должен появляться за пределами эстетики c (aes
)
. Я также думаю, что вы должны сначала поместить данные в подгруппу, а не делать все это в команде ggplot.
Альтернативой является фасет по отделам (см. Вариант 2 ниже).
Но сначала нужно увернуться от точек.
Вариант 1 : Подмножество
Создать подмножество для prueba и не пропустить для nivel:
MATH <- niveles[niveles$prueba=="MATEMÁTICAS" & !is.na(niveles$nivel),]
Создать подмножества для каждого отдела:
CUNDINAMARCA <- MATH[MATH$departamento=="CUNDINAMARCA",]
COLOMBIA <- MATH[MATH$departamento=="CUNDINAMARCA",]
Затем сделайте graph:
ggplot(data = CUNDINAMARCA) +
geom_bar(stat="identity", position = position_dodge(),
aes(x = año, y = desempeño, fill = nivel)) +
geom_point(data = COLOMBIA, shape = 24,
position = position_dodge(width=1), # You need this to align points with bars
aes(x = año, y = desempeño, group = nivel), fill = "blue")
Я не могу проверить это на ваших данных, но в качестве примера я использовал набор данных mtcars.
mtcars <- mtcars %>%
mutate(gear=factor(gear), cyl=factor(cyl))
VS0 <- mtcars[mtcars$vs==0,]
VS1 <- mtcars[mtcars$vs==1,]
ggplot() +
geom_bar(data = VS0, stat="identity", position = position_dodge(),
aes(x = cyl, y = mpg, fill = gear)) +
geom_point(data = VS1, shape = 24,
position = position_dodge(width=1),
aes(x = cyl, y = mpg, group = gear), fill = "blue")
Вариант 2: Фасетирование
ggplot(data = mtcars, group=vs) +
geom_bar(stat="identity", position = position_dodge(),
aes(x = cyl, y = mpg, fill = gear)) +
facet_grid(~vs, labeller=label_both)
Для ваших данных, возможно, это будет работать:
DATA <- MATH[MATH$departamento %in% c("CUNDINAMARCA","COLOMBIA"),]
ggplot(data = DATA, group=departamento) +
geom_bar(stat="identity", position = position_dodge(),
aes(x = año, y = desempeño, fill = nivel)) +
facet_grid(~departamento, labeller=label_both)