R语言 在ggplot2中对图例项进行排序并手动对其着色

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

我在使用以下代码段时遇到问题

ggplot(entidad, aes(x=Año, y=promedio, group=Entidad, color=Entidad)) + 
    geom_point(aes(shape = Entidad), size = 3, position = position_dodge(0.2)) +
    geom_errorbar(aes(ymin=promedio-desviación, ymax=promedio+desviación, color = Entidad), width=0.4,
                  position=position_dodge(0.2)) +
    ylim(150,350) + xlim(2015.7,2019.3) +
    ylab("Promedio (desviación estándar)") +
    geom_text(data = entidad[entidad$Entidad=="ZIPAQUIRÁ",],aes(label = promedio, y = promedio), hjust = 1.8) +
    geom_text(data= entidad[entidad$Entidad=="Nacional",], aes(label = promedio, y = promedio), hjust = -0.9) +
    geom_text(data = entidad[entidad$Entidad=="ZIPAQUIRÁ",], aes(label = paste("(",desviación,")"), y = promedio), 
              hjust = 1.5, vjust = 2) +
    geom_text(data = entidad[entidad$Entidad=="Nacional",], aes(label = paste("(",desviación,")"), y = promedio), 
              hjust = -0.45, vjust = 2) +
    scale_color_manual(values=c(rgb(0,81,160, maxColorValue = 255), 
                                rgb(58, 170, 53, maxColorValue = 255)),
                       breaks = c("ZIPAQUIRÁ", "Nacional")) +
    #scale_fill_manual(values = c(rgb(116, 141, 199, maxColorValue = 255), 
    #                             Nacional = rgb(164, 200, 70, maxColorValue = 255)),
    #                  breaks = c("ZIPAQUIRÁ", "Nacional")) +
    theme(
      panel.background = element_rect(fill = "white", colour = rgb(198,
                                                                   198,
                                                                   198, 
                                                                   maxColorValue = 255),
                                      size = 1, linetype = "solid"),
      #panel.grid.major = element_line(size = 0.1, linetype = 'dashed',
      #                               colour = rgb(198,198,198,
      #                                             maxColorValue = 255)) 
      panel.grid.minor = element_line(size = 0.1, linetype = 'dashed',
                                      colour = rgb(198,198,198,
                                                   maxColorValue = 255))
    )

它将返回图:

我不明白为什么我有两个图例标记为“实体”,我只希望底部的一个出现。我的第二个问题是,我希望项目“ZIPAQUIRá”是蓝色,“国家”是绿色。
有人知道我怎么才能做到吗?

j5fpnvbx

j5fpnvbx1#

“Entidad”有两个图例,因为它Map到两个美学元素-shapecolor。要删除美学图例(在您的情况下,上面的图例是shape),只需添加(使用+

guides(shape = FALSE)

scale_color_manual中的颜色遵循因子的顺序,因此如果您希望“ZIPAQUIR α”(第二个因子,它们是字母表,与您为breaks指定的顺序无关)为蓝色,请将蓝色作为第二种颜色,如下所示:

scale_color_manual(values=c(rgb(58, 170, 53, maxColorValue = 255), 
                              rgb(0,81,160, maxColorValue = 255)),
                     breaks = c("ZIPAQUIRÁ", "Nacional"))

一些模拟数据使其可重现:

set.seed(123)
entidad <- data.frame(Año = c(2016, 2016, 2017, 2017, 2018, 2018, 2019, 2019),
                      promedio = as.integer(runif(8, 200, 300)),
                      desviación = as.integer(runif(8, 25, 50)),
                      Entidad = rep(c("ZIPAQUIRÁ", "Nacional"), 2))

ggplot(entidad, aes(
  x = Año,
  y = promedio,
  group = Entidad,
  color = Entidad
)) +
  geom_point(aes(shape = Entidad),
             size = 3,
             position = position_dodge(0.2)) +
  geom_errorbar(
    aes(
      ymin = promedio - desviación,
      ymax = promedio + desviación,
      color = Entidad
    ),
    width = 0.4,
    position = position_dodge(0.2)
  ) +
  ylim(150, 350) + xlim(2015.7, 2019.3) +
  geom_text(data = entidad[entidad$Entidad == "ZIPAQUIRÁ", ],
            aes(label = promedio, y = promedio),
            hjust = 1.8) +
  geom_text(data = entidad[entidad$Entidad == "Nacional", ],
            aes(label = promedio, y = promedio),
            hjust = -0.9) +
  geom_text(
    data = entidad[entidad$Entidad == "ZIPAQUIRÁ", ],
    aes(label = paste("(", desviación, ")"), y = promedio),
    hjust = 1.5,
    vjust = 2
  ) +
  geom_text(
    data = entidad[entidad$Entidad == "Nacional", ],
    aes(label = paste("(", desviación, ")"), y = promedio),
    hjust = -0.45,
    vjust = 2
  ) +
  scale_color_manual(values = c(
    rgb(58, 170, 53, maxColorValue = 255),
    rgb(0, 81, 160, maxColorValue = 255)
  ),
  breaks = c("ZIPAQUIRÁ", "Nacional")) +
  theme(
    panel.background = element_rect(
      fill = "white",
      colour = rgb(198,
                   198,
                   198,
                   maxColorValue = 255),
      size = 1,
      linetype = "solid"
    ),
    panel.grid.minor = element_line(
      size = 0.1,
      linetype = 'dashed',
      colour = rgb(198, 198, 198,
                   maxColorValue = 255)
    )
  ) +
  guides(shape = FALSE)

相关问题