R 如何创建带有ggplot2的堆叠直方图?

R 如何创建带有ggplot2的堆叠直方图?,r,histogram,ggplot2,R,Histogram,Ggplot2,我想创建一个堆叠的柱状图,底部显示cancelled==TRUE,顶部显示cancelled==FALSE。不过,我似乎不明白。你知道我如何在使用ggplot2时做到这一点,同时维护facet环绕源代码吗 以下是我目前拥有的: ggplot(data, aes(x=days, fill="canceled")) + geom_histogram(binwidth=1, position="stack") + facet_wrap(~source, ncol=2, scale="f

我想创建一个堆叠的柱状图,底部显示
cancelled==TRUE
,顶部显示
cancelled==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

那么,您至少应该首先在ggplot命令中删除单词“cancelled”周围的引号。这会导致真值和假值的颜色不同,并且堆叠在另一个值的顶部,这比之前的要好,但是,它仍然会将真值堆叠在顶部,将假值堆叠在底部,这与您要求的相反。我不确定如何控制堆叠顺序(毕竟,您可能首先使用ggplot2,以便将许多详细的低级显示决策委派出去),但这至少解决了一半的问题。下面是我对您的代码稍加修改的版本和显示的结果。

库(ggplot2)

天数由于您需要通过变量
cancelled
获得不同的填充值,因此应使用不带引号的填充值。要以相反的顺序进行堆叠,您可以使用参数
order=
,并将
cancelled
设置为负值

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))

对于其他通过谷歌来到这里寻找如何使用
ggplot2
制作堆叠直方图的简单示例的人:

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

更多信息

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