这是一个数据和图表的例子
##generated date
GN<- c(1,2,3,4,5,6,7,8,9,10,11,12,13)
Yield<- c(10,30,50,65,75,80,90,100,105,110,115,115,116)
dataA<- data.frame(GN,Yield)
##ggplot
ggplot(data=dataA, aes(x=GN, y=Yield))+
geom_smooth(method="lm", formula=y~poly(x,2, raw=TRUE),
level=0.95, se=FALSE, linetype=1, size=1, color="Red") +
geom_point(col="Black", size=4) +
scale_x_continuous(breaks = seq(0,15,3), limits = c(0,15)) +
scale_y_continuous(breaks = seq(0,120,20), limits = c(0,120)) +
labs(x="Grain number", y="Yield") +
theme_grey(base_size=17, base_family="serif")+
theme(axis.line= element_line(size=0.5, colour="black"))+
windows(width=5.5, height=5)
我用ggplot绘制了二次图,现在我想画一个二次平台图,所以我研究了模型如下。
x<-dataA$GN
y<-dataA$Yield
Mean <- function(x, alpha, beta, gamma) {pmin(alpha + beta*x + gamma*x*x, alpha - beta^2/(4 * gamma))}
fm <- nls(y ~ Mean(x, alpha, beta, gamma), start = list(alpha = 0.45, beta = 0.05, gamma = -0.0025))
fm
summary(fm)
###
Formula: y ~ Mean(x, alpha, beta, gamma)
Parameters:
Estimate Std. Error t value Pr(>|t|)
alpha -5.04895 2.77042 -1.822 0.0984 .
beta 19.47453 0.91014 21.397 1.11e-09 ***
gamma -0.78821 0.06326 -12.460 2.05e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.83 on 10 degrees of freedom
Number of iterations to convergence: 1
Achieved convergence tolerance: 7.61e-07
那么,怎样才能在ggplot中画出一个二次曲线呢?简单地说,我想了一下。
ggplot(data=dataA, aes(x=GN, y=Yield))+
geom_smooth(method="nls", formula=fm, level=0.95, se=FALSE,
linetype=1, size=1, color="Red") +
geom_point(col="Black", size=4) +
scale_x_continuous(breaks = seq(0,15,3), limits = c(0,15)) +
scale_y_continuous(breaks = seq(0,120,20), limits = c(0,120)) +
labs(x="Grain number", y="Yield") +
theme_grey(base_size=17, base_family="serif")+
theme(axis.line= element_line(size=0.5, colour="black"))+
windows(width=5.5, height=5)
但弹出警告消息,没有行。
Warning message:
Computation failed in `stat_smooth()`
Caused by error in `getInitial.default()`:
! no 'getInitial' method found for "function" objects
你能告诉我如何用数据在ggplot中画出二次高原图吗?如果你介绍一下如何用这个简单的数据来做,我相信我可以用我的实际数据来做这个图。
非常感谢!!
1条答案
按热度按时间yvgpqqbh1#
您在
geom_smooth()
中将fm
传递给formula
,但fm
是拟合模型,而不是公式。请将formula
参数更改为y ~ Mean(x, alpha, beta, gamma)
,并使用method.args
传递start
列表。