R 如何绘制两个ggplot密度分布之间的差异?

R 如何绘制两个ggplot密度分布之间的差异?,r,plot,ggplot2,R,Plot,Ggplot2,我想用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)) ) #

我想用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()
库(ggplot2)
#制作玩具数据

n_sp在ggplot中可能有一种方法可以做到这一点,但通常事先进行计算是最容易的。在这种情况下,对相同范围内的
q
的每个子集调用
density
,然后减去y值。使用dplyr(如果愿意,可以转换为base 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()