2016-11-11 3 views
2

С помощью этого набора данных, где у меня есть фактор с 3 уровнями (ISO), а также двух непрерывных переменных (TEMP и диам)цикл для построения нескольких встроенных кривых в ggplot?

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")) 

enter image description here

+1

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

+0

Это была просто модель с несколькими параметрами, чтобы воспроизвести пример .. Спасибо – Juanchi

ответ

4

Вы можете получить тот же сюжет, не повторяя ту же функцию для каждого фактора уровня (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) 

enter image description here