【问题标题】:odering of the items of a legend in ggplot2 and color them manually在 ggplot2 中对图例的项目进行排序并手动着色
【发布时间】:2020-03-09 20:05:39
【问题描述】:

我在以下代码中遇到问题

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

返回情节:

我不明白为什么我有两个标有“Entidad”的图例,我只希望出现在底部的一个。我的第二个担心是我希望“ZIPAQUIRÁ”项目为蓝色,而“Nacional”项目为绿色。

有谁知道我如何做到这一点?

提前致以诚挚的问候。

【问题讨论】:

    标签: r ggplot2 legend geom-text


    【解决方案1】:

    “Entidad”有两个图例,因为您将它映射到两个美学 - 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)
    

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2011-04-14
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2014-08-22
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多