2017-04-23 151 views
1

有沒有辦法繪製平滑曲線(x = var1,y = var2)並將其相對於第三個連續變量(z = var3)着色?我正在使用下面的代碼:R ggplot2 - 帶有第三個連續變量的漸變顏色的geom_smooth

library(ggplot2) 

    x = runif(100,-20,20) 
    y = 2*x+x^2+rnorm(100,0,50) 
    z = 0.5*x+rnorm(100,0,2) 
    df = data.frame(x=x,y=y,z=z) 

    ggplot(data=df,aes(x=x,y=y))+geom_smooth(method='loess', aes(color=z),se=F) 

但是,平滑的線仍然是純藍色。

使用內部變量「..y ..」而不是var3顏色相對於var2的行。

ggplot(data=df,aes(x=x,y=y))+geom_smooth(method='loess', aes(color=..y..),se=F) 

是否有另一個內部變量來調用,以便對var3的顏色進行着色?

我能夠用geom_line生成所需的圖,但我想讓它平滑。

+0

請[讓你的例子可重複性(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#5963610)加入一些數據。 – alistaire

+0

您可以將各個數據點繪製成不同的顏色,但'geom_smooth'如何知道如何爲曲線的哪一部分着色? – Uwe

+0

你提供的信息很少,但試試這個:'aes(color = factor(var3))'。如果這對你的數據集有正確的含義,我們不能說。 – knb

回答

0

你在正確的軌道上使用geom_line,你只需要在預先平滑的數據上使用它。把你的數據框如上,那麼:

df$predict <- predict(loess(y~x, data = df)) 

ggplot(df, aes(x = x,y = predict)) + 
    geom_line(aes(colour = z)) 

這可產生難看的結果,如果你x有很大的差距;他們會以點之間的平坦部分出現。通過將newdata=提供給predict()並將其存儲在第二個數據幀中,但還需要爲那些新的x值重新計算z

enter image description here