r - 使用 geom_colour_manual 获取图例,其中 ggplot 包括回归线和 ab 线



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

我花了四个多小时查看每个看起来模糊相关的堆栈溢出问题以及scale_XXX_manual和图例的 R 食谱部分,我觉得我了解需要什么,即在相关几何的 aes 中使用虚拟变量指定颜色和线条类型,然后使用values=选项在 scale_XXXX_manual 语句中定义这些虚拟变量,就像我在以下代码

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-我认为映射选项仅与回归有关,但我现在明白这是所有的美学)停止错误消息并更接近所需的结果。 情节本身看起来应该如此,但拼图中缺少的部分是图例中包含基准线。我得到一个图例,其中只有灰色虚线被标识为回归线。

尝试将slopeintercept放在geom_ablineaes

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