如何使用循环将多个平滑线添加到单个ggplot中?

时间:2018-06-25 00:00:24

标签: r ggplot2

我试图将具有不同残差权重的不同阶多项式添加到单个ggplot中:

p <- ggplot(data = mydf, mapping = aes(x, y)) + geom_point()
# Add Polynomials with Varying Weights
for (i in 1:3){
  for (j in 1:3){
    p <- p+ stat_smooth(method = 'lm', formula= y~poly(x,i), aes(weight= 1/x^j), se=FALSE)
  }
}
print(p)

问题是,该图仅显示最后一条平滑线(在这种情况下,是三阶多项式,权重为1 / x ^ 3。 帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果在循环中添加调试print(p)调用,您将看到lm调用为每个内部J值生成3个相同的图,并且唯一的差异是由于I-值的变化而发生的(多项式如果权重都相同,则与默认权重值相比将没有任何作用。

mydf <- data.frame(x = 1:20, y=4 +(1:20)^2 + (1:20)^3+rnorm(20,0,5) )
p <- ggplot(data = mydf, mapping = aes(x, y)) + geom_point()
for (i in 1:3){
  for (j in 1:3){
    p <- p+ stat_smooth(method = 'lm', formula= y~poly(x,i), aes(weight= j), se=FALSE)
  print(p) }
}

您可能已经想象过使用+.gg会创建额外的图,但事实并非如此。