ggplot中的标准化高度

时间:2015-03-10 16:46:09

标签: r ggplot2 bar-chart

我试图用ggplot比较两组计数数据。数据集的长度不同,我无法确定如何将条形高度标准化为每个数据集中的行数。请参阅下面的代码示例:

示例数据集

set.seed(47)
BG.restricted.hs = round(runif(100, min = 47, max = 1660380))
FG.hs = round(runif(1000, min = 0, max = 1820786))

dat = data.frame(x = c(BG.restricted.hs, FG.hs), 
             source = c(rep("BG", length(BG.restricted.hs)),
                        rep("FG", length(FG.hs))))
dat$bin = cut(dat$x, breaks = 200)

第一次尝试:没有正常化。由于数据集大小,条形高度非常不同!

ggplot(dat, aes(x = bin, fill = source)) +
    geom_bar(position = "identity", alpha = 0.2) +
    theme_bw() +
    scale_x_discrete(breaks = NULL)

第二次尝试:尝试使用..count ..属性进行规范化

ggplot(dat,aes(x = bin, fill = source))+
    geom_bar(aes(y = ..count../sum(..count..)), alpha=0.5, position='identity')

这产生视觉上相同的结果,仅缩放整体y轴。似乎..count ..没有看“源”栏中的标签,我似乎无法找到一种方法,尽管经过数小时的实验,它仍然这样做。这可能吗?

2 个答案:

答案 0 :(得分:4)

stat_bin也会返回density: density of points in bin, scaled to integrate to 1所以

ggplot(dat,aes(x = bin, fill = source)) + 
    stat_bin(aes(group=source, y=..density..))

答案 1 :(得分:2)

我相信这应该做到。在source电话中将ggplot设置为一个组:

ggplot(dat, aes(x = bin, y = ..density.., group = source, fill = source)) +
    geom_bar(alpha = 0.5, position = 'identity')

DensityPlot