Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中在一个图形中绘制3个模型?_R_Ggplot2 - Fatal编程技术网

如何在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

我是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) +
    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()