如何在R中在一个图形中绘制3个模型?
我是R的新手,我的数据适合3个模型,如下所示: 模型1:y=a(x)+b 模型2:y=a(x)2+b(x)+c 现在我想在R中绘制所有这三个模型,但我找不到方法,你能帮我吗?我尝试了以下前两种型号,但我不知道如何在上面添加型号3:如何在R中在一个图形中绘制3个模型?,r,ggplot2,R,Ggplot2,我是R的新手,我的数据适合3个模型,如下所示: 模型1:y=a(x)+b 模型2:y=a(x)2+b(x)+c 现在我想在R中绘制所有这三个模型,但我找不到方法,你能帮我吗?我尝试了以下前两种型号,但我不知道如何在上面添加型号3: ggplot(data = data, aes(x = dNDVI, y = CBI)) + geom_point() + geom_smooth(method = lm, formula = y ~ x, size = 1, se = FALSE
ggplot(data = data, aes(x = dNDVI, y = CBI)) +
geom_point() +
geom_smooth(method = lm, formula = y ~ x, size = 1, se = FALSE) +
geom_smooth(method = lm, formula = y ~ x + I(x^2), size = 1, se = FALSE ) +
theme_bw()
我还想添加一个图例,显示3种不同颜色或3种型号的线条/曲线。您能指导我如何在图中制作吗?使用iris作为虚拟集来表示三个模型:
new.dat <- data.frame(Sepal.Length=seq(min(iris$Sepal.Length),
max(iris$Sepal.Length), length.out=50)) #new data.frame to predict the fitted values for each model
m1 <- lm(Petal.Length ~ Sepal.Length, iris)
m2 <- lm(Petal.Length ~ Sepal.Length + I(Sepal.Length^2), data=iris)
m3 <- nls(Petal.Length ~ Sepal.Length*(a*abs(Sepal.Length) + b) - 1,
start = c(a = 1.5, b = 2.7), data = iris)
new.dat$m1.fitted <- predict(m1, new.dat)
new.dat$m2.fitted <- predict(m2, new.dat)
new.dat$m3.fitted <- predict(m3, new.dat)
new.dat <- new.dat %>% gather(var, val, m1.fitted:m3.fitted) #stacked format of fitted data of three models (to automatically generate the legend in ggplot)
ggplot(new.dat, aes(Sepal.Length, val, colour=var)) +
geom_line()
new.dat ggplot2没有直接从geom_smooth
绘制nls
模型的方法(向下滚动至“方法”)。单独拟合模型,使用预测函数创建表示拟合线的虚拟数据集,然后绘制这些数据。非常感谢,所以我需要先单独拟合模型,然后使用带有预测值的几何线,对吗?Cheerri尝试了以下代码:ggplot(data=data,aes(x=dNDVI,y=CBI))+geom_point()+geom_smooth(method=lm,formula=y~x,size=1,se=FALSE)+geom_smooth(method=lm,formula=y~x+I(x^2),size=1,se=FALSE)+theme_bw()+geom_line(data=Xpred,aes(dNDVI,pred),col=green'))我可以为每个模型制作不同类型的线条,并为它们呈现我的图形图例吗?谢谢你,非常感谢你,亚当·奎克。非常感谢您对代码的帮助。我现在正在试。Cheers我运行最后一个模型,发现错误如下:>lm3这是一个相当复杂的问题。不幸的是,如果不知道您的数据是关于什么的,以及您的数据结构/范围是什么,我无法为您提供更多帮助。非常感谢您,我是新用户,我需要学习如何将数据上传到帖子。干杯
lm3 = nls(CBI ~ dNDVI*(a*abs(dNDVI) + b) - 1, start = c(a = 1.5, b = 2.7), data = data)
ggplot(data = data, aes(x = dNDVI, y = CBI)) +
geom_point() +
geom_smooth(method = lm, formula = y ~ x, size = 1, se = FALSE) +
geom_smooth(method = lm, formula = y ~ x + I(x^2), size = 1, se = FALSE ) +
theme_bw()
new.dat <- data.frame(Sepal.Length=seq(min(iris$Sepal.Length),
max(iris$Sepal.Length), length.out=50)) #new data.frame to predict the fitted values for each model
m1 <- lm(Petal.Length ~ Sepal.Length, iris)
m2 <- lm(Petal.Length ~ Sepal.Length + I(Sepal.Length^2), data=iris)
m3 <- nls(Petal.Length ~ Sepal.Length*(a*abs(Sepal.Length) + b) - 1,
start = c(a = 1.5, b = 2.7), data = iris)
new.dat$m1.fitted <- predict(m1, new.dat)
new.dat$m2.fitted <- predict(m2, new.dat)
new.dat$m3.fitted <- predict(m3, new.dat)
new.dat <- new.dat %>% gather(var, val, m1.fitted:m3.fitted) #stacked format of fitted data of three models (to automatically generate the legend in ggplot)
ggplot(new.dat, aes(Sepal.Length, val, colour=var)) +
geom_line()