首页 文章

ggplot2堆积直方图 - 转换为密度图

提问于
浏览
1

我可以使用ggplot2轻松制作堆积直方图,并在y轴上进行计数 . 我想要的是根据密度转换这个图 . 我可以通过将aes(y = .. density ..)添加到geom_histogram图层来完成此操作;但ggplot所做的是绘制每个单独数据系列的密度,每个数据系列的总面积为1 . 因此,如果您在一个直方图中堆叠4个数据系列,则条形图的总面积将为4 .

我所追求的是根据密度绘制堆积直方图,但在计算密度时考虑所有数据系列 . 换句话说......我希望密度堆积直方图具有与计数直方图相同的比例条 .

2 回答

  • 1
    library(ggplot2)
    dtDataset = data.frame(
       V1 = c('a','b'),
       V2 = runif(20)
    )
    
    ggplot(dtDataset) + 
       geom_density(aes(x = V2, group = V1), position = 'stack')
    
  • 0

    我找到了一种方法,包括计算binwidth = 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)
    

    现在每个箱子根据每个类别中包含点的比例着色,并且符合黑色线条给出的密度定义 .

    multi-class histogram

相关问题