2012-05-10 22 views
7

Chcę dodać linię wykładniczą (+ moc) (trend) do mojego wykresu. Używam pakietu ggplot2.Dodaj linię trendu exp/power do ggplot

mam coś takiego (tylko ze znacznie większej ilości danych):

require(ggplot2) 

df <-read.table("test.csv", header = TRUE, sep = ",") 
df 
    meta temp 
1 1.283 6 
2 0.642 6 
3 1.962 6 
4 8.989 25 
5 8.721 25 
6 12.175 25 
7 11.676 32 
8 12.131 32 
9 11.576 32 

ggplot(df, aes(temp, meta)) + 
    ylab("Metabolism") + xlab("Temperature") + 
    geom_point() + 
    theme_bw() + 
    scale_x_continuous(limits = c(0, 35)) + 
    scale_y_log10() 

wiem, że to powinno być wyrażone za pomocą funkcji wykładniczej - więc moje pytanie brzmi: w jaki sposób mogę ad najlepszy „wykładniczy” fit ? Podobnie, czy możliwe jest również dopasowanie sił?

Czy funkcja stat_smooth() ma taką możliwość, czy są inne funkcje w pakiecie ggplot2, których powinienem użyć?

+1

Witamy w SO. +1 za opublikowanie kodu i przykładowych danych. – Andrie

Odpowiedz

10

Można określić model pasuje jako argument do stat_smooth przekazując dwa argumenty:

  • metody, na przykład method="lm"
  • model, np. model = log(y) ~ x

ggplot2 najpierw robi transformacji skali i wtedy pasuje do modelu, więc w przykładzie po prostu trzeba dodać

+ stat_smooth(method="lm") 

do działki:

library(ggplot2) 
ggplot(df, aes(temp, meta)) + 
    ylab("Metabolism") + xlab("Temperature") + 
    geom_point() + 
    theme_bw() + 
    scale_x_continuous(limits = c(0, 35)) + 
    scale_y_log10() + 
    stat_smooth(method="lm") 

enter image description here


Podobnie, montaż i wykreślenie krzywej mocy jest tak proste, jak zmienia swoją x skalę zalogować:

ggplot(df, aes(temp, meta)) + 
    ylab("Metabolism") + xlab("Temperature") + 
    geom_point() + 
    theme_bw() + 
    scale_x_log10() + 
    scale_y_log10() + 
    stat_smooth(method="lm") 

enter image description here

+0

Dziękuję bardzo! Świetnie, że ggplot odkrywa to przez "to samo", jakiego rodzaju modelu użyć, gdy oś się zmienia. Mam jeszcze jedno pytanie. Czy możliwe jest uzyskanie wartości R^2 z dopasowania? Na normalnym wykresie liniowym po prostu użyłbym: dopasowania <- lm (x ~ y, dane = df), podsumowania (dopasowania) [C ("r.squire")] – PJensen