цикл для построения нескольких подогнанных кривых в ggplot?

С этим набором данных, где у меня есть фактор с 3 уровнями (iso) и двумя непрерывными переменными (temp и diam)

library(ggplot2)
library(nlme)

zz <-(" iso temp diam
 Itiquira   22  5.0
 Itiquira   22  4.7
 Itiquira   22  5.4
 Itiquira   25  5.8
 Itiquira   25  5.4
 Itiquira   25  5.0
 Itiquira   28  4.9
 Itiquira   28  5.2
 Itiquira   28  5.2
 Itiquira   31  4.2
 Itiquira   31  4.0
 Itiquira   31  4.1
 Londrina   22  4.5
 Londrina   22  5.0
 Londrina   22  4.4
 Londrina   25  5.0
 Londrina   25  5.5
 Londrina   25  5.3
 Londrina   28  4.6
 Londrina   28  4.3
 Londrina   28  4.9
 Londrina   31  4.4
 Londrina   31  4.1
 Londrina   31  4.4
    Sinop   22  4.5
    Sinop   22  5.2
    Sinop   22  4.6
    Sinop   25  5.7
    Sinop   25  5.9
    Sinop   25  5.8
    Sinop   28  6.0
    Sinop   28  5.5
    Sinop   28  5.8
    Sinop   31  4.5
    Sinop   31  4.6
    Sinop   31  4.3"
)
df <- read.table(text=zz, header = TRUE)

Я подгоняю кривую для каждого уровня фактора, и мне нужно изобразить их на одном графике.

Есть ли способ сделать следующий график всех кривых сразу, избегая повторения одной и той же функции "+ geom_smooth(...)" для каждого фактора уровня (iso)?

daf <- groupedData(diam ~ temp | iso, data = df, order = FALSE) 

ip <- ggplot(data=daf,  aes(x=temp, y=diam, colour = iso)) +  
  geom_point() + facet_wrap(~iso)

ip + geom_smooth(method = "nls", 
                method.args = list(formula = y ~ thy * exp(thq * (x-thx)^2 + thc * (x - thx)^3), 
                                   start = list(thy=5.4, thq=-0.01, thx=25, thc=0.0008)),
                se = F, size = 0.5, data = subset(daf, iso=="Itiquira")) +

  geom_smooth(method = "nls", 
              method.args = list(formula = y ~ thy * exp(thq * (x-thx)^2 + thc * (x - thx)^3), 
                                 start = list(thy=5.4, thq=-0.01, thx=25, thc=0.0008)),
              se = F, size = 0.5, data = subset(daf, iso=="Londrina")) +

  geom_smooth(method = "nls", 
              method.args = list(formula = y ~ thy * exp(thq * (x-thx)^2 + thc * (x - thx)^3), 
                                 start = list(thy=5.4, thq=-0.01, thx=25, thc=0.0008)),
              se = F, size = 0.5, data = subset(daf, iso=="Sinop")) 

введите здесь описание изображения


person Juanchi    schedule 11.11.2016    source источник
comment
Я не знаю, имеет ли это какое-либо практическое значение для вашей работы, но результат полинома третьего порядка почти такой же, как ваша функция nls: geom_smooth(method="lm", formula=y ~ poly(x,3), se=FALSE, size=0.5).   -  person eipi10    schedule 11.11.2016
comment
Это была просто модель с несколькими параметрами для воспроизведения примера.. Спасибо   -  person Juanchi    schedule 11.11.2016


Ответы (1)


Вы можете получить тот же график, не повторяя одну и ту же функцию для каждого фактора уровня (iso), например:

ggplot(data=daf,  aes(x=temp, y=diam, colour = iso)) +  
  geom_point() +
  facet_wrap(~iso) +
  geom_smooth(method="nls",
              method.args=list(formula=y ~ thy * exp(thq * (x-thx)^2 + thc * (x - thx)^3), 
                                 start=list(thy=5.4, thq=-0.01, thx=25, thc=0.0008)),
              se = F, 
              size = 0.5)

введите здесь описание изображения

person Megatron    schedule 11.11.2016