代码之家  ›  专栏  ›  技术社区  ›  Mark

向ggplot2添加手动图例

  •  0
  • Mark  · 技术社区  · 4 年前

    我在同一块地上画了两条线 ggplot

    ggplot() + 
    geom_line(data=df_density0, aes(x = x, y = y), color = "darkred") + 
    geom_line(data=df_density1, aes(x = x, y = y), color="steelblue", linetype="twodash") +
    xlab('') +
    ylab('Density')
    

    darkred 我想写的颜色 Target = 0 steelblue 我想写的颜色 Target = 1 .

    1 回复  |  直到 4 年前
        1
  •  1
  •   teunbrand    4 年前

    我将给出一个添加图例的典型方法的示例,而不是回答如何添加手动图例的问题。

    我想你有以下结构的数据:

    library(ggplot2)
    
    df_density0 <- density(rnorm(100))
    df_density0 <- data.frame(
      x = df_density0$x,
      y = df_density0$y
    )
    
    df_density1 <- density(rnorm(100, mean = 1))
    df_density1 <- data.frame(
      x = df_density1$x,
      y = df_density1$y
    )
    

    你只需要设置 aes(colour = ...) 您希望图例标签显示的文本。然后在比例中,您可以设置您想要使用的实际颜色。

    ggplot(mapping = aes(x = x, y = y)) +
      geom_line(data = df_density0, aes(colour = "Target = 0")) +
      geom_line(data = df_density1, aes(colour = "Target = 1")) +
      scale_colour_manual(
        values = c("darkred", "steelblue")
      )
    

    于2021-04-10由 reprex package (1.0.0版)

        2
  •  0
  •   Peter    4 年前

    linetype 选项。重点是将数据转换成“整齐”或“长”格式。

    library(ggplot2)
    library(dplyr)
    
    df_density0 <- 
      data.frame(x = c(1, 3),
                 y = c(4, 5)) %>% 
      mutate(df = "dens0")
    
    df_density1 <- 
      data.frame(x = c(1, 3),
                 y = c(1, 1.5)) %>%
      mutate(df = "dens1")
    
    df <- bind_rows(df_density0, df_density1)
      
    
    ggplot(df) + 
      geom_line(aes(x = x, y = y, colour = df, linetype = df)) +
      scale_colour_manual(values = c("dens0" = "darkred", "dens1" = "steelblue"))+
      scale_linetype_manual(values = c("dens0" = "solid", "dens1" = "twodash"))+
      xlab('') +
      ylab('Density')
    

    于2021-04-10由 reprex package

    推荐文章