我使用以下函数将非线性曲线拟合到一组数据。我一直收到以下错误:
Error in do.call("layer", list(mapping = mapping, data = data, stat = stat, :
object 'y' not found
错误来自geom_smooth
。你能提出建议吗?
以下是一些测试数据和功能:
library("ggplot2")
DF <- data.frame(RFP_fold=1:20, E=rnorm(20))
flimPlot <- function(data) {
ggplot(data, aes(x=RFP_fold, y=E)) +
geom_point(shape=1) +
geom_smooth(method=nls, # Add non linear regression fit
formula='y ~ a * (x / (x + K))', # Forumla for fit
start=list(a=max(y), K = 0.1), # set the parameters
se = FALSE, # No shaded CI
fullrange=TRUE) # Extend regression line
}
flimPlot(DF)
# Error in do.call("layer", list(mapping = mapping, data = data, stat = stat, :
object 'y' not found
答案 0 :(得分:0)
我不知道为什么变量没有被传递给geom_smooth所以我只是在函数中添加了一些变量。
flimPlot <- function(data) {
y <- data$E
x <- data$RFP_fold
a <- max(dat$E)
st <- list(a=a, K=0.1)
fit <- nls(formula="E ~ a * (RFP_fold / (RFP_fold + K))", dat, start=st )
K <- round(coef(fit))
ggplot(data, aes(x=RFP_fold, y=E)) +
geom_point(shape=1) +
#geom_text(aes(3,15, label = paste(expr, K, sep=""))) +
#annotate("text", x = 3, y = 15, label = paste(expr, K, sep="") ) +
stat_smooth( geom = "smooth",
method=nls, # Add non linear regression fit
formula="y ~ a * (x / (x + K))", # Forumla for fit
start=st, # set the parameters
#se = FALSE, # No shaded CI
fullrange=TRUE) + # Extend regression line
scale_y_continuous(limits = c(0, 20)) +
theme(plot.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.line = element_line(color = 'black'),
text = element_text(size=12),
#axis.title.x = element_blank(),
#axis.title.y = element_blank(),
legend.justification=c(1,0)) +
ylab("FRET E%") +
xlab("acceptor intensity")
}