我有一个特定的 ggplot 工作流程,由于 drc 包(Christian Ritz)中的限制,我必须坚持,所以工作流程在某种程度上是非标准的。
此工作流程中使用的函数
library(ggplot2)
library(ggpubr)
library(drc)
("run_drc_model")
run_drc_model <- function(d,x,y,z,a,b){
demo.LL.4 <- drm(data = d, y~x, fct=LL.4(),na.action = na.omit) # run model.
demo.fits <<- expand.grid(Pr=exp(seq(log(a), log(b), length=200))) # generate a data frame with simulated x values
pm <<- predict(demo.LL.4, newdata=demo.fits, interval="confidence") # predict the y values of the simulated x values using the above model
demo.fits$p <<- pm[,1] # store the predicted y values in the p column of a dataframe
demo.fits$pmin <<- pm[,2] # store the prediction CI lower limit for each prediction
demo.fits$pmax <<- pm[,3] # store the prediction CI upper limit for each prediction
}
("idrcplot")
idrcplot <- function(d,x,y,xlab="Cell Lysate %",ylab="Specific A450",col="FBS"){
ggplot(d, aes(x = x, y = y, color=col)) +
scale_color_manual(values = treatment.colors)+
geom_point() +
geom_ribbon(data=demo.fits, aes(x=Pr, y=p, ymin=pmin, ymax=pmax), alpha=0.2,color=NA) +
geom_line(data=demo.fits, aes(x=Pr, y=p), size=.8)+
coord_trans(x="log")+
xlab(xlab) +
ylab(ylab) +
annotation_logticks(scaled = FALSE)+
theme_pubr()
}
("idrcadd")
idrcadd <- function(x="#00a14b"){
p1 +
geom_point(data=fig1, aes(x = Protein, y = A450_bc, color=x)) +
geom_ribbon(data=demo.fits, aes(x=Pr, y=p, ymin=pmin, ymax=pmax), alpha=0.2, color=NA) +
geom_line(data=demo.fits, aes(x=Pr, y=p, color=x), size=.8)+
coord_trans(x="log")
}
工作流程
treatment.colors <- c("col1"="#1c75bc","col2"="#ed1c24")
fig1 <- data.frame(Protein = c(NA,NA,1.842959,1.842959,3.685917,3.685917,7.371834,7.371834,14.743668,14.743668,29.487337,29.487337,58.974674,58.974674,117.949347,117.949347), A450_bc = c(0.000,0.000,0.140,0.194,0.350,0.399,0.574,0.714,1.231,1.188,2.511,2.318,3.447,3.233,3.542,3.555)) # First curve
run_drc_model(fig1,fig1$Protein,fig1$A450_bc,"col1",1,250)
p1 <- idrcplot(fig1,fig1$Protein,fig1$A450_bc,"Protein","A450_bc","col1")
p1 #See image 1
# Add the second curve
fig1 <- data.frame(Protein = c(NA,NA,2.332072,2.332072,4.664145,4.664145,9.328290,9.328290,18.656579,18.656579,37.313158,37.313158,74.626317,74.626317,149.252633,149.252633),A450_bc = c(0.000,0.000,0.138,0.294,0.246,0.432,0.406,0.547,0.895,0.849,1.842,1.810,3.007,2.918,3.419,3.469)) # Second curve
run_drc_model(fig1,fig1$Protein,fig1$A450_bc,"col2",1,250)
p1 <- idrcadd("col2")
p1 # See image 2
问题:
当我运行上述工作流程时,我得到“错误:美学必须是长度 1 或与数据 (200) 相同:x、y、颜色”
但是当我将工作流程的“# Add the second curve”部分更改为
fig1 <- data.frame(Protein = c(NA,NA,2.332072,2.332072,4.664145,4.664145,9.328290,9.328290,18.656579,18.656579,37.313158,37.313158,74.626317,74.626317,149.252633,149.252633), A450_bc = c(0.000,0.000,0.138,0.294,0.246,0.432,0.406,0.547,0.895,0.849,1.842,1.810,3.007,2.918,3.419,3.469)) # Second curve
run_drc_model(fig1,fig1$Protein,fig1$A450_bc,"col2",1,250)
p1 <- p1 +
geom_point(data=fig1, aes(x=Protein, y=A450_bc, color="col2")) +
geom_ribbon(data=demo.fits, aes(x=Pr, y=p, ymin=pmin, ymax=pmax), alpha=0.2, color=NA) +
geom_line(data=demo.fits, aes(x=Pr, y=p, color="col2"), size=.8)+
coord_trans(x="log")
p1 # See image 3
我得到了预期的结果。
我想知道如何正确地将第二条曲线添加到第一条曲线而不产生错误。