ggplot多面累积直方图

时间:2018-07-29 22:23:34

标签: r ggplot2

我有以下数据

set.seed(123)
x = c(rnorm(100, 4, 1), rnorm(100, 6, 1))
gender = rep(c("Male", "Female"), each=100)
mydata = data.frame(x=x, gender=gender)

,我想用ggplot绘制两个累积直方图(一个用于男性,另一个用于女性)。 我已经尝试过下面的代码

ggplot(data=mydata, aes(x=x, fill=gender)) + stat_bin(aes(y=cumsum(..count..)), geom="bar", breaks=1:10, colour=I("white")) + facet_grid(gender~.)

但是我得到这张图

enter image description here

显然,这是不正确的。

如何获得正确的,像这样:

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:2)

我将预先计算每个组每个bin的cumsum值,然后使用geom_histogram进行绘制。

mydata %>%
    mutate(x = cut(x, breaks = 1:10, labels = F)) %>%      # Bin x
    count(gender, x) %>%                                   # Counts per bin per gender
    mutate(x = factor(x, levels = 1:10)) %>%               # x as factor
    complete(x, gender, fill = list(n = 0)) %>%            # Fill missing bins with 0
    group_by(gender) %>%                                   # Group by gender ...
    mutate(y = cumsum(n)) %>%                              # ... and calculate cumsum
    ggplot(aes(x, y, fill = gender)) +                     # The rest is (gg)plotting
    geom_histogram(stat = "identity", colour = "white") + 
    facet_grid(gender ~ .)

enter image description here

答案 1 :(得分:0)

回答一百万年后。...

我一直在寻找解决同一问题的方法,我到了这里。

最终我自己弄清楚了,所以我把它放在这里,以防其他人需要它。

根据要求:无需任何前功!

x = 0 0 0 0 0.0967621 0 0 0 0

enter image description here