Упорядочить элементы легенды в ggplot2 и раскрасить их вручную - PullRequest
0 голосов
/ 09 марта 2020

У меня проблемы со следующим кодом мира

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

, который возвращает сюжет:

enter image description here

Я не понимаю, почему это я У меня есть две легенды с надписью «Энтидад», я хочу, чтобы появилась только нижняя. Мое второе беспокойство заключается в том, что я хотел бы, чтобы пункт «ZIPAQUIRÁ» был синего цвета, а «Nacional» - зеленого.

Кто-нибудь знает, как мне этого добиться?

С уважением, заранее.

1 Ответ

1 голос
/ 09 марта 2020

У вас есть две легенды о «Энтидаде», потому что он сопоставлен с двумя эстетиками - shape и color. Чтобы удалить легенду для эстетики c (в вашем случае верхняя легенда для shape), вы можете просто добавить (с +)

guides(shape = FALSE)

Цвета в scale_color_manual следуйте порядок факторов, поэтому, если вы хотите, чтобы "ZIPAQUIRÁ" (второй фактор, они были буквенно c независимо от порядка, который вы указали для 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)

enter image description here

...