2017-03-13 1 views
1

Voici mes exemples de données. Je veux tracer à la fois y1 et y2 contre x1 dans un seul complot. C'est ce que j'ai fait:Ajustement d'une courbe quadratique dans ggplot

library(ISLR) 
library(ggplot2) 

y1<-scale(Auto$horsepower,scale = T,center=T) 
y2<-scale(Auto$weight,scale = T,center=T) 
x1<-Auto$mpg 
df<-data.frame(y1,y2,x1) 

p<-ggplot(df,aes(x=x1)) + 
    geom_point(aes(y = y1), shape = 16) + 
    geom_point(aes(y = y2), shape = 2) 

Je veux insérer une ligne quadratique à la fois pour y1 et y2 contre x. Je l'ai fait:

p + stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 1) 

Il vomit une erreur:

Warning message: 
Computation failed in `stat_smooth()`: 
variable lengths differ (found for 'x') 

Autre que cela, la commande stat_smooth ne mettre une ligne du second degré alors que je besoin de deux lignes du second degré pour les deux y1 et y2.

Comment ai-je réussi cela dans R?

Merci

Répondre

9

Vous devez ajouter deux stat_smooth() appels et ajouter aes() montrer que y à utiliser.

ggplot(df,aes(x=x1)) + 
     geom_point(aes(y = y1), shape = 16) + 
     geom_point(aes(y = y2), shape = 2) + 
     stat_smooth(aes(y = y1),method = "lm", formula = y ~ x + I(x^2), size = 1) + 
     stat_smooth(aes(y = y2),method = "lm", formula = y ~ x + I(x^2), size = 1, color = "red") 

Ou faire le tableau de format long et alors vous aurez besoin un seul appel de stat_smooth() et geom_point().

library(tidyr) 
df_long <- df %>% gather(variable, value, y1:y2) 

ggplot(df_long, aes(x1, value, color = variable)) + 
     geom_point() + 
     stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 1) 

enter image description here