2017-03-02 34 views
4

ggplot2を使用して2つの類似した密度分布の違いを説明したいと思います。ここで私が持っているデータのタイプのおもちゃの例である:2つのggplot密度分布の差をプロットする方法は?

library(ggplot2) 

# Make toy data 
n_sp <- 100000 
n_dup <- 50000 
D <- data.frame( 
    event=c(rep("sp", n_sp), rep("dup", n_dup)), 
    q=c(rnorm(n_sp, mean=2.0), rnorm(n_dup, mean=2.1)) 
) 

# Standard density plot 
ggplot(D, aes(x=q, y=..density.., col=event)) + 
    geom_freqpoly() 

ではなく別々にどのようにこれらの間の差を示す単一ラインをプロットすることができ、上記のように(dupsp)各カテゴリの密度をプロット分布?

Iはsp密度分布からdup密度分布を減算した場合、上記玩具の例では、得られた線は、以下の(より小さいsp値の存在があるため)プロットの左側にゼロを超えることとなります右に0が表示されています(大量のdup値が存在するため)。タイプdupspの観測数が異なる可能性はありません。

さらに一般的には、類似の濃度分布の違いを表示するにはどうすればよいですか?

答えて

3

ggplotでこれを行う方法がありますが、あらかじめ計算を行うのが最も簡単です。この場合、qの各サブセットでdensityを同じ範囲で呼び出してから、yの値を減算します。 dplyrを使用して、

library(dplyr) 
library(ggplot2) 

D %>% group_by(event) %>% 
    # calculate densities for each group over same range; store in list column 
    summarise(d = list(density(q, from = min(.$q), to = max(.$q)))) %>% 
    # make a new data.frame from two density objects 
    do(data.frame(x = .$d[[1]]$x, # grab one set of x values (which are the same) 
        y = .$d[[1]]$y - .$d[[2]]$y)) %>% # and subtract the y values 
    ggplot(aes(x, y)) + # now plot 
    geom_line() 

plot of subtracted densities

を(ベースRまたはご希望の場合data.tableに変換)
関連する問題