ggplot2 - 向多层添加手动图例

ggplot2 - add manual legend to multiple layers

我有一个 ggplot,其中我使用 geom_points 的颜色作为我的一个列(我的治疗)的函数,然后我使用 scale_color_manual 选择颜色。

我自动得到我的图例

问题是我需要绘制一些与实验设置有关的水平线,我正在用 geom_vline 做这些,但我不知道如何手动添加单独的图例这与我已有的并没有混淆,并且说明了这些行是什么。

我有以下代码

ggplot(dcons.summary, aes(x = meters, y = ymean, color = treatment, shape = treatment)) +
  geom_point(size = 4) +
  geom_errorbar(aes(ymin = ymin, ymax = ymax)) + 
  scale_color_manual(values=c("navy","seagreen3"))+
  theme_classic() + 
  geom_vline(xintercept = c(0.23,3.23, 6.23,9.23), color= "bisque3", size=0.4) +
  scale_x_continuous(limits = c(-5, 25)) +
  labs(title= "Sediment erosion", subtitle= "-5 -> 25  meters; standard deviation; consistent measurements BESE & Control", x= "distance (meters)", y="erosion (cm)", color="Treatment", shape="Treatment")

所以我只需要在 "treatment" 下方添加一个额外的图例,上面写着 "BESE PLOTS LOCATION" 并且与灰线

相关

我一直在寻找解决方案,我尝试使用 "scale_linetype_manual""guides",但我没有找到

由于您没有提供可重现的示例,我使用了来自 mtcars 数据集的数据。 另外我稍微修改了this similar answer。由于您已经指定了颜色,此外填充因子在这里不起作用,您可以将线型用作 aes 中的第二个参数,这可以在图例中显示:

xid <- data.frame(xintercept = c(15,20,30), lty=factor(1))
mtcars %>% 
   ggplot(aes(mpg ,cyl, col=factor(gear))) + 
      geom_point() + 
      geom_vline(data=xid, aes(xintercept=xintercept, lty=lty) , col = "red", size=0.4) +
      scale_linetype_manual(values = 1, name="",label="BESE PLOTS LOCATION")

或者没有第二个data.frame:

   ggplot() + 
      geom_point(data = mtcars,aes(mpg ,cyl, col=factor(gear))) + 
      geom_vline(aes(xintercept=c(15,20,30), lty=factor(1) ), col = "red", size=0.4)+
      scale_linetype_manual(values = 1, name="",label="BESE PLOTS LOCATION")