geom_bar和geom_point位于同一ggplot和同一组中

hc2pp10m  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(207)

我有最新的密码

ggplot(data = niveles[niveles$departamento=="CUNDINAMARCA" &
                        niveles$prueba=="MATEMÁTICAS" &
                        !is.na(niveles$nivel),]) + 
  geom_bar(stat="identity", position = position_dodge(),
           aes(x = año, y = desempeño, fill = nivel)) +
  geom_point(data = niveles[niveles$prueba=="MATEMÁTICAS" &
                              niveles$departamento=="COLOMBIA" &
                              !is.na(niveles$nivel),], shape = 24,
             aes(x = año, y = desempeño, group = nivel, fill = "blue"))

得到了下面的图:

然而,我希望在“niveles”变量的相应类别中得到每一个“点”,有人知道我怎么做吗?

gcmastyq

gcmastyq1#

你可以像使用position=position_dodge()减淡线条一样减淡点。但是,你需要添加一个width参数来指定“减淡”的程度。值1应该对应于被减淡的线条。图例中还有一个未知的“蓝色”类别。这是因为fill参数应该出现在美学(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",]

然后制作图表:

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)

相关问题