首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ggplot2堆叠直方图-转换为密度图

ggplot2堆叠直方图-转换为密度图
EN

Stack Overflow用户
提问于 2016-04-19 22:26:05
回答 2查看 1.1K关注 0票数 1

我可以很容易地使用ggplot2制作一个堆叠的直方图,并在y轴上计数。我想要的是将这个图转换成密度。我可以通过添加aes(y=..density..)但geom_histogram所做的是将每个单独数据序列的密度绘制为每个数据序列的总面积为1。因此,如果您在一个直方图中堆叠4个数据序列,则条形图的总面积将为4。

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

EN

回答 2

Stack Overflow用户

发布于 2016-04-20 00:41:19

代码语言:javascript
运行
复制
library(ggplot2)
dtDataset = data.frame(
   V1 = c('a','b'),
   V2 = runif(20)
)

ggplot(dtDataset) + 
   geom_density(aes(x = V2, group = V1), position = 'stack')
票数 1
EN

Stack Overflow用户

发布于 2016-07-22 01:01:04

为此,我找到了一种方法,包括计算二进制宽度= bw,并将y变量设置为(..count..)/(n*bw),其中n是数据点的数量。

生成一些玩具数据

代码语言:javascript
运行
复制
    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

代码语言:javascript
运行
复制
    n <- dim(X)[1]
    bw <- 3.49 * sd(X[, "x"]) * dim(X)[1]^(-1/3)  ## binwidth using Scott's rule.

生成绘图

代码语言:javascript
运行
复制
    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进行着色,并符合由黑线给出的密度定义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36721313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档