我想将一个二进制变量的“正常”直方图(y轴上的分数)与第二个直方图(最好通过其alpha值(透明度)与第一个直方图区分开来)相结合,该直方图描述x轴的特定类别。
有关示例,请参阅以下代码:
ggplot(mtcars, aes(x = mpg, y = ..count../sum(..count..))) +
geom_histogram()对于数值x变量,我创建了factor变量:
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值直接与factorvariable的各自条形重叠?当然,如果因子变量的条的宽度代表它们“表示”的数值x变量的分数,这将是最好的。然而,后者可能过于复杂?
提前谢谢。
发布于 2017-02-22 16:03:42
事实证明,如果你知道如何提问,ggplot2会自动完成你想要的大部分事情。我创建了两个直方图层。第一种方法具有手动选择的存储箱数量(bins=10),并手动调整boundary=0.25以使存储箱边界在视觉上对齐。第二种方法手动创建了精确的存储箱边界(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%,但蓝色条的面积完全是红色的两倍!
https://stackoverflow.com/questions/42368930
复制相似问题