ggplot用于回归线的单独图例

时间:2018-02-07 22:03:22

标签: r ggplot2 legend

我想在ggplot散点图上有两个图例:一个用于点颜色,另一个用于回归线颜色。

您能解释一下如何为这两条回归线添加单独的图例吗?

ggplot(mtcars, aes(x = mpg, y = hp)) +
  geom_point(aes(color = gear)) + 
  geom_smooth(method='lm', formula=y~x, se = FALSE, size = 0.5, color = 'dark green') + 
  geom_smooth(method='lm', aes(mpg, hp), data = mtcars[mtcars$wt > 3, ], se = FALSE, size = 0.5, color = 'dark orange', fullrange = TRUE)

2 个答案:

答案 0 :(得分:4)

需要注意的两点:

  1. 默认情况下,根据指定aes(color = XXX, ...)的所有徽标,ggplot将为每个映射的美学生成一个图例。创建单独图例的一种解决方法是利用某些形状(可以在geom_point()中指定)可以采用fill美学以及color美学的事实。
  2. screenshot

    图片取自here。形状21-25同时接受color(以黑色表示)& fill(以红色表示)。

    1. 要创建图例,必须在 aes()中指定美学。但有时我们希望直接为每一行指定颜色。一种解决方法是使用scale_XXX_manual()选项,该选项允许您在geom中指定aes(color = "some label"),并在scale_color_manual(values = c("some label" = "some color"))
    2. 中映射颜色

      代码:

      ggplot(mtcars,
             aes(x = mpg, y = hp)) +
        geom_point(aes(fill = gear), shape = 21) +          # specify shape here
        geom_smooth(method = 'lm', formula = y~x, 
                    se = FALSE, size = 0.5,
                    aes(color = "lm1")) +                   # specify color within aes()
        geom_smooth(method = 'lm', se = FALSE, size = 0.5,
                    data = mtcars[mtcars$wt > 3, ],
                    aes(x = mpg, y = hp, color = "lm2"),    # as above
                    fullrange = TRUE) +
        scale_fill_continuous(name = "Points") +            # legend name
        scale_color_manual(name = "Regression",             # legend name
                           values = c("lm1" = "darkgreen",  # map regression line colors
                                      "lm2" = "darkorange"))
      

      plot

答案 1 :(得分:0)

问题是因为齿轮是一个数值,如果你想要一个单独的图例,你需要使用离散值,如 factor character 数据类型,所以您可以像这样更改geom_point的图层:

    geom_point(aes(color = factor(gear)))