我有一个geom_point绘图,在上面添加了geom_smooth回归线(我想显示为虚线灰色线)和geom_abline(我想显示为实心黑色线)。我可以这样做,但是当我尝试添加用于标识这两行的图例时,就会出现问题。
我花了四个多小时来研究每个看起来模糊相关的stackoverflow问题,以及scale_XXX_manual和Legends的R Cookbook部分,我觉得我理解了所需要的,即,在其中使用伪变量指定颜色和线条类型相关地理区域的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-我认为映射选项仅与回归相关,但我现在理解这是所有的美感)停止了错误消息并获得了很多更接近期望的结果。情节本身看起来应该是应该的,但难题中缺少的部分是在图例中包含了基准线。我得到了一个图例,其中只有虚线灰色表示为回归线。
答案 0 :(得分:0)
尝试将slope
和intercept
放在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"))