将直方图与“分类的”x变量图结合起来

时间:2017-02-21 13:40:49

标签: r ggplot2

我希望将二进制变量(具有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变量的分数的宽度。但是,后者可能过于复杂了?

提前致谢。

1 个答案:

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

enter image description here

请注意,这个情节可能会产生误导;红色和蓝色条分别代表20%的数据,但蓝色条的面积是红色的两倍!