ggplot 中的归一化条形高度
normalized bar heights in ggplot
我正在尝试用 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.. 没有查看 "source" 列中的标签,尽管经过数小时的试验,我似乎无法找到一种方法来做到这一点。这可能吗?
stat_bin
也 returns 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..))
我相信这应该可以做到。在 ggplot
调用中将 source
设置为一个组:
ggplot(dat, aes(x = bin, y = ..density.., group = source, fill = source)) +
geom_bar(alpha = 0.5, position = 'identity')
我正在尝试用 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.. 没有查看 "source" 列中的标签,尽管经过数小时的试验,我似乎无法找到一种方法来做到这一点。这可能吗?
stat_bin
也 returns 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..))
我相信这应该可以做到。在 ggplot
调用中将 source
设置为一个组:
ggplot(dat, aes(x = bin, y = ..density.., group = source, fill = source)) +
geom_bar(alpha = 0.5, position = 'identity')