我想创建一个堆叠直方图,在底部显示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
答案 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来委派大量那些详细的低级显示决策)但这至少解决了你问题的一半。我的代码略有修改版本和显示的结果将在下面附加。
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)
更多信息here