2016-03-25 20 views
3

vlineをカットオフとして濃度プロットをシェードすることは可能ですか?たとえば:vlineの左側に陰影濃度プロット?

df.plot <- data.frame(density=rnorm(100)) 
library(ggplot2) 
ggplot(df.plot, aes(density)) + geom_density() + 
    geom_vline(xintercept = -0.25) 

私は、新しい変数を作成しようとしたが、私は私がggplotと直接それを行う方法を知らない

df.plot <- df.plot %>% mutate(color=ifelse(density<(-0.25),"red","NULL")) 


ggplot(df.plot, aes(density, fill = color, colour = color)) + geom_density() + 
    geom_vline(xintercept = -0.25) 

答えて

3

を期待どおりに動作しません。しかし、あなたは所望の範囲を超えるggplot外の密度を計算することができます:

set.seed(4132) 
df.plot <- data.frame(density=rnorm(100)) 
ds <- density(df.plot$density, from = min(df.plot$density), to = -0.25) 
ds_data <- data.frame(x = ds$x, y = ds$y) 

density()は、最初の引数に与えられたポイントの密度を推定します。結果には、xyの値が含まれます。興味のあるの範囲をfromtoと指定できます。密度がggplot()でプロットされたものと一致するには、範囲を最小値と最大値の両方にdf.plot$densityに設定します。ここでは、to-0.25に設定されています。これは、密度曲線の一部のみがvラインの左側にあるためです。 ds$xds$yxyの値を抽出できます。

プロットは、あなたがやったのと同じコードを使用しますが、上記算出した濃度データを追加geom_area()を追加することによって作成されます。

library(ggplot2) 
ggplot(df.plot, aes(density)) + geom_density() + 
    geom_vline(xintercept = -0.25) + 
    geom_area(data = ds_data, aes(x = x, y = y)) 

enter image description here

関連する問題