2012-05-10 35 views
7

Quiero agregar una línea exponencial (+ potencia) (tendencia) a mi gráfica. Estoy usando el paquete ggplot2.Añadir línea de tendencia exp/power a un ggplot

tengo algo como esto (solo con muchos más datos):

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

Sé que esto debe ser expresado con una función exponencial - así que mi pregunta es cómo puede anuncio el mejor ajuste 'exponencial' ? Del mismo modo, ¿es posible hacer un ajuste de potencia también?

¿La función stat_smooth() tiene esta oportunidad, o hay otras funciones en el paquete ggplot2 que debo usar?

+1

Bienvenido a SO. +1 para publicar código y datos de muestra. – Andrie

Respuesta

10

Puede especificar el modelo para encajar como un argumento a stat_smooth haciendo pasar dos argumentos:

  • método, por ejemplo, method="lm"
  • modelo
  • , p. Ej. model = log(y) ~ x

ggplot2 primero hace la transformación de escala y luego se ajusta el modelo, por lo que en su ejemplo sólo tiene que añadir

+ stat_smooth(method="lm") 

a su terreno:

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


Del mismo modo, el montaje y el trazado de una curva de potencia es tan simple como cambiar su x-escala para iniciar sesión:

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

¡Muchas gracias! Es genial que ggplot lo resuelva por 'él mismo' qué tipo de modelo usar cuando los ejes son cambios. Tengo otra pregunta tú. ¿Es posible obtener el valor R^2 del ajuste? En un diagrama lineal normal, simplemente usaría: ajuste <- lm (x ~ y, data = df), resumen (ajuste) [C ("r.squire")] – PJensen

Cuestiones relacionadas