我希望将二进制变量(具有y轴上的分数)的“正常”直方图与第二直方图组合(优选地通过其α值(透明度)与第一直方图区分),其描绘了x-的特定类别。轴。
请参阅以下代码以获取示例:
ggplot(mtcars, aes(x = mpg, y = ..count../sum(..count..))) +
geom_histogram()
在数字x变量中,我创建了因子变量:
mtcars$mpgCat <- ifelse(mtcars$mpg <= 15, 0,
ifelse(mtcars$mpg > 15 & mtcars$mpg <=25, 1,
ifelse(mtcars$mpg > 25 & mtcars$mpg < 35, 2, NA)))
mtcars$mpgCat <- factor(mtcars$mpgCat, levels = c(0:2), labels = c("<=15", ">15", "<35"))
当指定stat =“count”时,因子变量会产生直方图:
ggplot(mtcars, aes(mpgCat, y = ..count../sum(..count..))) +
geom_histogram(stat="count")
是否有某种方法可以将两种直方图组合在一起,最好是后者是透明的,以便数值x值直接与因子变量的相应条重叠?当然,最好是因子变量的条形将具有代表它们“代表”的数字x变量的分数的宽度。但是,后者可能过于复杂了?
提前致谢。
答案 0 :(得分:1)
事实证明,如果你知道如何提问,ggplot2会自动完成你想要的大部分内容。我创建了两个直方图图层。第一个具有手动选择的箱数(bins=10
)并手动调整boundary=0.25
以使箱柜边界在视觉上对齐。第二个已手动创建精确的bin边界(breaks=c(10, 15, 25, 35)
),以便与您的三个mpgCat
类别完全匹配。它还为整个图层设置了透明度(alpha=0.4
)。您可能还对将cut()
函数用于将连续变量拆分为因子感兴趣。
library(ggplot2)
mtcars$mpgCat = cut(mtcars$mpg, c(10, 15, 25, 35))
p = ggplot(data=mtcars) +
geom_histogram(aes(x=mpg, y=..count../sum(..count..)),
bins=20, boundary=0.25) +
geom_histogram(aes(x=mpg, y =..count../sum(..count..), fill=mpgCat),
alpha=0.4, breaks=c(10, 15, 25, 35))
ggsave("histgram.png", plot=p, height=4, width=6, dpi=150)
请注意,这个情节可能会产生误导;红色和蓝色条分别代表20%的数据,但蓝色条的面积是红色的两倍!