2016-05-15 75 views
4

我想將比例顏色漸變應用到平滑線上。 此刻下面的代碼將顏色修復設置爲紅色。是否可以使用R中的ggplot將顏色漸變應用於geom_smooth?

library(ggplot2) 
a <- data.frame(year = 1:100, values = sin(1:100)*1000 + runif(100)) 
ggplot(a, aes(x = year, y = values, color = values)) + geom_line(size = 2) + 
scale_colour_gradient2(
    low = "blue", 
    mid = "white" , 
    high = "red", 
    midpoint = 10 
)+ 
geom_smooth(
data = a, 
aes(x = year, y = values), 
color = "red", 
size = 2 
) 

enter image description here

但是,當我設置color = values這是行不通的。相反,它需要默認的藍色。

geom_smooth(
data = a, 
aes(x = year, y = values, color = values), 
size = 2 
) 

enter image description here

在此先感謝。

回答

9

使用geom_smooth(aes(color=..y..))geom_smooth添加顏色審美。 ..y..是由geom_smooth內部計算的y值的向量,用於創建迴歸曲線。一般來說,當您想要將審美內容添加到內部計算的彙總值時,您需要將美學映射到該內部值。這裏,內部值是平滑函數的值。在其他情況下,對於直方圖或條形圖可能是..count..,對於密度圖可能是..density..

下面是使用您的數據的示例。請注意,我已經調整了一些繪圖參數以供說明。

set.seed(48) 
a <- data.frame(year = 1:100, values = sin(1:100)*1000 + runif(100)) 

ggplot(a, aes(x = year, y = values, color = values)) + 
    geom_line(size = 0.5) + 
    geom_smooth(aes(color=..y..), size=1.5, se=FALSE) + 
    scale_colour_gradient2(low = "blue", mid = "yellow" , high = "red", 
         midpoint=10) + 
    theme_bw() 

enter image description here

注意,迴歸直線的顏色不會改變很多,因爲它的y值跨越相對於數據的小範圍。這是另一個假數據的例子,它可以產生更廣泛的迴歸曲線。

set.seed(1938) 
a2 <- data.frame(year = seq(0,100,length.out=1000), values = cumsum(rnorm(1000))) 

ggplot(a2, aes(x = year, y = values, color = values)) + 
    geom_line(size = 0.5) + 
    geom_smooth(aes(color=..y..), size=1.5, se=FALSE) + 
    scale_colour_gradient2(low = "blue", mid = "yellow" , high = "red", 
         midpoint=median(a2$values)) + 
    theme_bw() 

enter image description here

+0

非常感謝。這正是我正在尋找的。 –

相關問題