如何使用/ ggplot2创建堆叠直方图?

时间:2013-12-20 17:03:45

标签: r histogram ggplot2

我想创建一个堆叠直方图,在底部显示canceled == TRUE,在顶部显示canceled == FALSE。但我似乎无法弄明白。有什么想法我怎么能用ggplot2做这个,同时保持facet环绕源?

以下是我目前的情况:

ggplot(data, aes(x=days, fill="canceled")) +
    geom_histogram(binwidth=1, position="stack") +
    facet_wrap(~source, ncol=2, scale="free_y") +
    coord_cartesian(xlim=c(0, 21))

我的数据:

days,source,canceled
1,ABC,TRUE
1,ABC,FALSE
1,ABC,TRUE
2,ABC,FALSE
2,XYZ,FALSE

3 个答案:

答案 0 :(得分:2)

由于您需要通过变量canceled获取不同的填充值,因此应该在没有引号的情况下使用它。要以相反的顺序进行堆叠,您可以使用参数order=并为canceled设置负数。

ggplot(data, aes(x=days, fill=canceled,order=-canceled)) +
  geom_bar(binwidth=1, position="stack") +
  facet_wrap(~source, ncol=2, scale="free_y") +
  coord_cartesian(xlim=c(0, 21))

答案 1 :(得分:1)

好吧,至少应该从ggplot命令中“取消”一词中删除引号开头。这导致TRUE和FALSE值的颜色不同并且堆叠在一起,这比以前更好,但是,它仍然在顶部堆叠为TRUE,在底部堆叠为FALSE,与您要求的相反。我不确定如何控制堆叠顺序(毕竟,你可能首先使用ggplot2来委派大量那些详细的低级显示决策)但这至少解决了你问题的一半。我的代码略有修改版本和显示的结果将在下面附加。 ggplot results for histogram stacking example

library(ggplot2)

days <- c(1, 1, 1, 2, 2)
source <- c("ABC", "ABC", "ABC", "ABC", "XYZ")
canceled <- c(TRUE, FALSE, TRUE, FALSE, FALSE)

data <- data.frame(days, source, canceled)

print(ggplot(data, aes(x=days, fill=canceled)) + 
             geom_histogram(binwidth=1, position="stack") +
             facet_wrap(~source, ncol=2, scale="free_y") +
             coord_cartesian(xlim=c(0, 21)))

答案 2 :(得分:0)

对于任何其他通过Google到达这里的人,寻找一个非常简单的示例,说明如何使用ggplot2进行堆积直方图:

ggplot(diamonds, aes(price, fill = cut)) +
  geom_histogram(binwidth = 500)

enter image description here

更多信息here