R geom_smooth在aes写什么

时间:2014-07-29 12:47:10

标签: r ggplot2 regression

我使用R和ggplot。我已经为4个不同的data.frames画了点。现在我想为这些点集绘制4条回归线。

我之前的代码:

ggplot() + 
    ggtitle("title")+
    xlab("date") +
    ylab("value") +
    geom_point(data=toplot$1, aes(x=date, y=x, color='1'), size = 4, shape=1) +     
    geom_point(data=toplot$2, aes(x=date, y=x, color='2'), size = 4, shape=2)+      
    geom_point(data=toplot$3, aes(x=date, y=x, color='3'), size = 4, shape=3)+      
    geom_point(data=toplot$4, aes(x=date, y=x, color='4'), size = 4, shape=4)+          
    scale_colour_manual(name = "legend", values = c('1'='green', "2"="red", "3"="blue", "4"="brown"))

当我为第一个data.frame

添加一行时
geom_smooth(data=toplot$1, formula=date~x,method=lm, color='1',aes(x=date, y=x)) 

我收到一条消息:

  

每组只有一个唯一的x值。也许你想要aes(group = 1)

如果我添加行:

geom_smooth(data=toplot$1, formula=date~x,method=lm, color='1',aes(group=1)) 

我收到另一条消息:

  

stat_smooth需要以下缺失的美学:x,y

可能你知道吗,我需要写的是aes论证(没有任何aes它也不起作用)。

谢谢。

4 个答案:

答案 0 :(得分:1)

简短回答可能是这样的:

geom_smooth(data=toplot$1, formula=y~x,method=lm, color='1',aes(x = date, y = x,group=1))

geom_smooth中的公式始终是&#34;泛型&#34;在某种意义上,您引用响应并与x和y协变,无论您在其他图层中将它们称为什么。)< / p>

但是,这个:

geom_point(data=toplot$1, aes(x=date, y=x, color='1'), size = 4, shape=1) +     
geom_point(data=toplot$2, aes(x=date, y=x, color='2'), size = 4, shape=2)+      
geom_point(data=toplot$3, aes(x=date, y=x, color='3'), size = 4, shape=3)+      
geom_point(data=toplot$4, aes(x=date, y=x, color='4'), size = 4, shape=4)

不是正确的方法。基本上任何时候你发现自己一遍又一遍地重复这样的geom这是一个很好的迹象,表明你没有正确使用ggplot。

相反,人们通常会使用rbind将所有四个数据帧合并为一个数据帧,然后创建值为1-4的第三个变量grp来标记每个部分。然后你只做一层:

geom_point(data = full_data,aes(x = date,y = x, color = grp, shape = grp), size = 4)

答案 1 :(得分:0)

平滑函数,在本例中为“lm”,使用aes中定义的变量,因此您可以使用类似下面的内容

toplot1 <- data.frame(date=seq(Sys.Date()-30,Sys.Date(),1), x= 1:31+ rnorm(31, 0, 2))
toplot2 <- data.frame(date=seq(Sys.Date()-30,Sys.Date(),1), x= 1:31+ 5 + rnorm(31, 0, 2))
 sp <- ggplot() + 
     ggtitle("title")+
     xlab("date") +
     ylab("value") +
     geom_point(data=toplot1, aes(x=date, y=x, color='1'), size = 4, shape=1) +     
     geom_point(data=toplot2, aes(x=date, y=x, color='2'), size = 4, shape=2)+      
     scale_colour_manual(name = "legend", values = c ('1'='green', "2"="red", "3"="blue", "4"="brown"))
 sp <- sp  +
      geom_smooth(data=toplot1, aes(x=date, y=x, color="1"), formula = y~x, method="lm") +
      geom_smooth(data=toplot2, aes(x=date, y=x, color="1"), formula = y~x, method="lm")
plot(sp)

我不太了解名称为toplot $ 1等的数据框的结构。

答案 2 :(得分:0)

简短回答为aes(x=date, y=x, color='1'),正确答案是您应该学会使用ggplot2。有关如何使用分组的示例,请参阅下文。

# prepare data
toplot2 <- do.call(rbind, toplot)
toplot2[, "group"] <- factor(rep(1:length(toplot), times=sapply(toplot, nrow)))
# ggplot command
ggplot(toplot2, aes(x=date, y=x, color=group, shape=group)) +
  geom_point(size=4) +
  geom_smooth(method=lm) +
  ggtitle("title")+
  xlab("date") +
  ylab("value") +
  scale_colour_manual(name = "legend", values = c('1'='green', '2'='red', '3'='blue', '4'='brown')) +
  scale_shape_manual(name = "legend", values = c('1'=1, '2'=2, '3'=3, '4'=4))

编辑:您似乎必须在您的示例中添加aes(x=date, y=x, group=1, color='1')或在我的版本中添加aes(x=date, y=x, color=group, shape=group, group=group)。参见例如Adding a simple lm trend line to a ggplot boxplotJoining means on a boxplot with a line (ggplot2),虽然他们也没有解释原因。

答案 3 :(得分:0)

我的脚本运行,只添加group = 1 x,y轴。

graf_disp <- ggplot(dados, aes(x=Treatments, y=Survival, group=1)) +
  geom_point(aes(col=Treatments)) +
  geom_smooth(method=lm, se=F) +
  labs(subtitle = "Weeds Survival Percentage",
       y = "Weeds Survival (%)", x = "Treatments")

plot(graf_disp)