Voici mes données d'exemple. Je veux tracer les deux y1
et y2
contre x1
dans une seule parcelle. C'est ce que j'ai fait:
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 pour y1 et y2 contre x. J'ai fait ça:
p + stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 1)
Cela génère une erreur:
Warning message:
Computation failed in `stat_smooth()`:
variable lengths differ (found for 'x')
En dehors de cela, la commande stat_smooth ne mettra qu'une seule ligne quadratique alors que j'ai besoin de deux lignes quadratiques pour les deux y1
et y2
.
Comment ai-je réussi cela dans R?
Merci
Vous devez ajouter deux appels stat_smooth()
et ajouter aes()
pour montrer quel 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 créez un tableau au format long et vous n'aurez besoin que d'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)