web-dev-qa-db-ja.com

ggplotで2次曲線をあてはめる

これは私のサンプルデータです。両方をプロットしたいy1およびy2に対してx1単一のプロット。これは私がやったことです:

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)

エラーがスローされます:

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

これ以外に、stat_smoothコマンドは2つの2次線を1つだけ配置しますが、両方のy1およびy2

Rでこれをどのように達成しましたか?

ありがとう

12
user53020

2つのstat_smooth()呼び出しを追加し、aes()を追加して、使用するyを表示する必要があります。

_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()を1回呼び出すだけで済みます。

_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

22
Didzis Elferts