ggplot2 - 在同一个图上绘制多个模型

jsl*_*che 4 r ggplot2

我有一个线性和非线性模型列表,这些模型来自不同的数据集,它们测量相同的两个变量x,y并且我想在同一个图上绘制stat_smooth.这是为了能够轻松地比较数据集之间x和y之间关系的形状.

我正试图找出最有效的方法来做到这一点.现在我正在考虑创建一个空的ggplot对象,然后使用某种循环或lapply顺序添加到该对象,但这比我想象的要困难.当然,简单地提供模型是最容易的,ggplot但据我所知,这是不可能的.有什么想法吗?

这是一个简单的示例数据集,仅使用两个模型,一个是线性的,一个是指数的:

df1=data.frame(x=rnorm(10),y=rnorm(10))
df2=data.frame(x=rnorm(15),y=rnorm(15))

df.list=list(lm(y~x,df1),nls(y~exp(a+b*x),start=list(a=1,b=1),df2))
Run Code Online (Sandbox Code Playgroud)

以及两个单独的示例图:

ggplot(df1,aes(x,y))+stat_smooth(method=lm,se=F)
ggplot(df2,aes(x,y))+stat_smooth(method=nls,formula=y~exp(a+b*x),start=list(a=1,b=1),se=F)
Run Code Online (Sandbox Code Playgroud)

And*_*rie 8

编辑:请注意,OP在此答案发布后更改了问题

将数据合并到一个数据框中,新的列指示模型,然后用于ggplot区分模型:

df1=data.frame(x=rnorm(10),y=rnorm(10))
df2=data.frame(x=rnorm(10),y=rnorm(10))

df1$model <- "A"
df2$model <- "B"

dfc <- rbind(df1, df2)

library(ggplot2)
ggplot(dfc, aes(x, y, group=model)) + geom_point() + stat_smooth(aes(col=model))
Run Code Online (Sandbox Code Playgroud)

这会产生:

在此输入图像描述