簡體   English   中英

如何繪制兩個ggplot密度分布之間的差異?

[英]How to plot the difference between two ggplot density distributions?

我想用ggplot2來說明兩個相似密度分布之間的區別。 這是我所擁有的數據類型的玩具示例:

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 )的密度,而是如何繪制顯示這些分布之間差異的單行?

在上面的玩具例如,如果我減去dup從密度分布sp密度分布,所得到的線將是零以上關於圖的左側(由於存在較小的豐度sp值)和低於0在右邊(因為有大量更大的dup值)。 並不是說dupsp類型的觀察數量可能不同。

更一般地說 - 顯示相似密度分布之間差異的最佳方法是什么?

可能有一種方法可以在ggplot中執行此操作,但通常最容易事先進行計算。 在這種情況下,在相同范圍內對q每個子集調用density ,然后減去y值。 使用dplyr(如果你願意,轉換為基數R或data.table),

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()

減去密度的圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM