2017-02-09 56 views
2

我的問題: 我想顯示兩個不同組/組合物的迴歸線。 我剛剛開始使用ggplot,因此對ggplot中的迴歸行知之甚少。ggplot:添加不同子集的迴歸線

mel: 
composition diametre volume 
mixed 0.261 71.3645893 
mixed 0.233 392.9487358 
mixed 0.319 284.8683927 
pure 0.248 120.7654642 
pure 0.274 142.1273373 
pure 0.308 215.9924244 
pure 0.188 26.11804847 
pure 0.124 5.795590982 
pure 0.307 136.7732086 
pure 0.283 138.0600194 
pure 0.175 32.43129359 
pure 0.205 32.58726466 
pure 0.159 12.27308951 

下面的代碼顯示散點圖非常清楚,但產生增加geom_smooth(object 'volume' not found)時的誤差;

ggplot(data = mel, aes(x=diametre, y=volume,col=as.factor(composition))) + 
    geom_point()+ 
    geom_smooth (data = subset(mel, composition=="mixed"), method='lm', 
       formula= log(volume)~I(diametre^2), 
       se=FALSE, size=2) + 
    geom_smooth (data = subset(mel, composition=="pure"), method = "lm", 
       formula = (volume)~I(diametre^2), se = FALSE, size = 2) 

我以爲也許是錯誤發生,因爲我subting的構圖?! 所以我試圖用一個表來工作的每個組成,因此代碼看起來像這樣

ggplot(data = mel, aes(x=diametre, y=volume,col=as.factor(composition))) + 
    geom_point()+ 
    geom_smooth (data = mel_mix, method='lm', 
       formula= log(volume)~I(diametre^2), 
       se=FALSE, size=2) + 
    geom_smooth (data = mel_pure, method = "lm", 
       formula = (volume)~I(diametre^2), se = FALSE, size = 2) 

導致:invalid argument to unary operator

回答

1

只要這應該工作(你需要有x,ygeom_smooth):

ggplot(data = mel, aes(x=diametre, y=volume,col=as.factor(composition))) + 
    geom_point() + 
    geom_smooth(method='lm', 
       formula= log(y)~I(x^2), 
       se=FALSE, size=2) 

或者如果你想單獨適合子集數據:

ggplot(data = mel, aes(x=diametre, y=volume,col=as.factor(composition))) + 
    geom_point()+ 
    geom_smooth (data = subset(mel, composition=="mixed"), method='lm', 
       formula= log(y)~I(x^2), 
       se=FALSE, size=2) + 
    geom_smooth (data = subset(mel, composition=="pure"), method = "lm", 
      formula = log(y)~I(x^2), se = FALSE, size = 2) 

volume~I(diametre^2)是爲您的數據更適合我認爲:

ggplot(data = mel, aes(x=diametre, y=volume,col=as.factor(composition))) + 
    geom_point() + 
    geom_smooth(method='lm', 
       formula= y~I(x^2), 
       se=FALSE, size=2) 

enter image description here

+1

大,非常感謝。 – chajamalka