我可以很容易地使用ggplot2制作一个堆叠的直方图,并在y轴上计数。我想要的是将这个图转换成密度。我可以通过添加aes(y=..density..)但geom_histogram所做的是将每个单独数据序列的密度绘制为每个数据序列的总面积为1。因此,如果您在一个直方图中堆叠4个数据序列,则条形图的总面积将为4。
我想要的是根据密度绘制堆叠的直方图,但在计算密度时要考虑所有数据序列。换句话说..。我希望密度堆叠直方图具有与计数直方图相同的比例条。
发布于 2016-04-20 00:41:19
library(ggplot2)
dtDataset = data.frame(
V1 = c('a','b'),
V2 = runif(20)
)
ggplot(dtDataset) +
geom_density(aes(x = V2, group = V1), position = 'stack')发布于 2016-07-22 01:01:04
为此,我找到了一种方法,包括计算二进制宽度= bw,并将y变量设置为(..count..)/(n*bw),其中n是数据点的数量。
生成一些玩具数据
require(ggplot2)
set.seed(1234)
x1 <- rnorm(10000, 0, 1)
x2 <- rnorm(90000, 1, 1)
X <- data.frame(x = c(x1, x2),
Class = as.factor(c(rep(1, length(x1)), rep(2, length(x2)))))计算n和binwidth
n <- dim(X)[1]
bw <- 3.49 * sd(X[, "x"]) * dim(X)[1]^(-1/3) ## binwidth using Scott's rule.生成绘图
p1 <- ggplot(data = X, aes(x = x, bw = bw, n = n)) +
geom_histogram(aes(y = (..count..)/(n * bw), fill = Class),
binwidth = bw) +
geom_density()
print(p1)现在,根据每个类别中包含的点的比例对每个bin进行着色,并符合由黑线给出的密度定义。

https://stackoverflow.com/questions/36721313
复制相似问题