2016-05-15 6 views
4

スムーズラインにもスケールカラーグラデーションを適用したいと思います。 現時点では、以下のコードは色の修正を赤に設定しています。Rのggplotを使ってgeom_smoothに色グラデーションを適用することはできますか?

enter image description here

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 
) 
しかし、私は 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値のベクトルで、回帰曲線を作成します。一般に、内部的に計算された集計値に審美的なものを追加する場合は、審美的なものをその内部的な値にマッピングする必要があります。ここで、内部値は平滑化関数の値..y..です。それ以外の場合は、ヒストグラムまたはバープロットの場合は..count..、密度プロットの場合は..density..となります。

あなたのデータを使用した例です。私は、いくつかのプロットパラメータを微調整してイラストレーションを作成しています。そのy値がデータに対して小さな範囲に及ぶため、回帰直線の色があまり変化しないこと

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

注意。より広い範囲の回帰曲線を生成する偽データの別の例を次に示します。

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

どうもありがとうございました。それはまさに私が探しているものです。 –

関連する問題