首页 > 解决方案 > 使用 geom_colour_manual 获取图例,其中 ggplot 包括回归线和 ab 线

问题描述

我有一个 geom_point 图,我在其中添加了 geom_smooth 回归线(我想显示为灰色虚线)和 geom_abline(我想显示为实心黑线)。我可以这样做,但是当我尝试包含标识两条线的图例时,问题就出现了。

我花了四个多小时查看每个看起来不太相关的 stackoverflow 问题,以及 scale_XXX_manual 和 legends 的 R 食谱部分,我觉得我明白需要什么,即使用 aes 中的虚拟变量指定颜色和线型相关的几何图形,然后使用选项在 scale_XXXX_manual 语句中定义这些虚拟变量,values=就像我在以下代码中所做的那样

df <- data.frame(xvar=c(1, 1.7, 2, 2.47, 3.47),
                 yvar=c(-0.543,  0.326,  0.147,  0.554,  1.180),
                 wtvar=c(167,  43, 965, 841,  84))
ggplot(df, aes(x=xvar, y=yvar))+
  geom_point()+
  geom_smooth(method="lm", 
              mapping = aes(weight = wtvar, colour="A", linetype="B"))+
  geom_abline(slope=1, intercept = (-1.3), aes(colour="C", linetype="D"), size=1)+
  ylim(-1,2.5)+
  theme_classic()+
  scale_colour_manual(name="Legend", 
                      labels=c("regression", "benchmark"),
                      values=c(A="grey85", C="black"))+
  scale_linetype_manual(name="Legend", 
                        labels=c("regression", "benchmark"),
                        values=c(B="dashed", D="solid"))

我收到以下错误:

错误:ggplot2 不知道如何处理 uneval 类的数据

非常感谢解释为什么我所做的事情不起作用以及正确解决方案的指导。

更新:按照建议聚合 geom_smooth 中的两个 aes 语句(感谢 Z. Lin - 我认为映射选项仅与回归有关,但我现在明白这都是美学)停止错误消息并更接近期望的结果。情节本身看起来应该如此,但谜题中缺少的部分是图例中包含基准线。我得到一个图例,只有灰色虚线被标识为回归线。

标签: rggplot2legend

解决方案


试着把slopeandintercept放在里面geom_abline aes

ggplot(df, aes(x=xvar, y=yvar))+
  geom_point()+
  geom_smooth(method="lm", 
              aes(weight = wtvar, colour="A", linetype="B"))+
  geom_abline(aes(slope=1, intercept = (-1.3), colour="C", linetype="D"), size=1)+
  ylim(-1,2.5)+
  theme_classic()+
  scale_colour_manual(name="Legend", 
                      labels=c("regression", "benchmark"),
                      values=c(A="grey85", C="black"))+
  scale_linetype_manual(name="Legend", 
                        labels=c("regression", "benchmark"),
                        values=c(B="dashed", D="solid"))

推荐阅读