2017-03-13 6 views
1

이것은 내 샘플 데이터입니다. 한 플롯에서 y1y2x1에 대해 음모로 나타내려고합니다. 이것은 내가 한 것입니다 :ggplot에서 2 차 곡선 피팅

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) 

x에 대해 y1과 y2 모두에 대해 2 차 라인을 삽입하고 싶습니다.

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

그것은 오류 던졌습니다 : :이 한 내가 y1y2 모두이 개 차 라인 을 필요로하는 동안이보다 더

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

기타의 stat_smooth 명령은 하나 개의 차 라인을 넣어 것입니다.

어떻게 R에서이 작업을 수행 했습니까?

감사

답변

9

당신은이 stat_smooth() 호출을 추가하고 사용할 y 보여 aes()을 추가해야합니다.

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

또는 긴 형식의 테이블을 만들고 다음 stat_smooth()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