我使用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它也不起作用)。
谢谢。
答案 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 boxplot或Joining 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)