У меня есть два кадра данных raw
и coef
:
Первый кадр данных raw
содержит:
Time
(от 0 до 900 секунд) OD
для многих Вариантов и четырех выполнений. Второй кадр данных coef
содержит:
M
, D.1
и t0.1
) в той строке.Я вывел разделение необработанных данных на печать на Вариант и окрасил runID
, без проблемы. Но, теперь я хочу наложить образцовые кривые согласно runID
.
Так как коэффициенты моделирования находятся в различные кадры данных с различными размерами, я не могу просто cbind
их. stat_function
не будет работать на меня. Я могу получить только одну кривую, показывающую за один раз.
Я попробовал a for loop
, добавление a stat_function
слой каждый раз:
p <- ggplot(temp, aes(Time, OD)) + geom_point(aes(colour = runID), size = 2) #works fine!
calc <- function(x){temp.n$M[ID] * (1 - exp(temp.n$D.1[ID] * temp.n$t0.1[ID] - x)))}
for(ID in 1:length(unique(temp.n$runID))) {
p <- p + stat_function(fun = calc)
}
print(p)
В конце, всех p
возвраты являются графиком необработанных данных, и заключительная кривая от цикличного выполнения укусила. p
кажется, возвращается к его исходному состоянию каждый раз, когда я пытаюсь добавить новое stat_function
слой.
Какие-либо идеи?
Следуя решению , приведенному здесь , вам, возможно, придется имитировать эффект stat_function
самостоятельно. Поскольку вы не приводите воспроизводимый пример, я создал простой, который, надеюсь, имитирует вашу проблему:
library(ggplot2)
reg.fun <- function(x, par1, par2){exp(-x*par1) + par2} #functional form
reg <- data.frame(g=factor(1:3), par1=(1:3)/10, par2=1:3) #parameters for 3 groups
#generate data from reg.fun
dd <- expand.grid(x=0:9, g=reg$g) #set x values, and 3 groups from reg
dd <- merge(dd, reg) #"import" parameters
dd$mn <- with(dd, reg.fun(x, par1, par2)) #value of function for given x's
dd$y <- rnorm(30, mean=dd$mn, sd=0.5) #add variability
dd <- subset(dd, select=c(g,x,y)) #remove auxiliary variables
#similarly to above generate values for the function on a fine grid of x values
pred.dd <- expand.grid(x=seq(0,9, length=101), g=levels(dd$g))
pred.dd <- merge(pred.dd, reg)
pred.dd$y <- with(pred.dd, reg.fun(x, par1, par2))
#draw the plot
p <- qplot(x,y, colour=g, data=dd) #scatterplot of data
p + geom_line(data=pred.dd) #add the curves of the functions