子集scale_fill_gradient by factor OR在柱状图的计数条中添加密度梯度

时间:2017-01-19 21:28:43

标签: r ggplot2

我的例子:我正在尝试创建一个图表,用于捕获传入GPA的类通过率如何变化。理想情况下,这将是直方图形式,我可以快速编辑binwidth,以查看GPA不同容器的通过率如何变化,并且可以包含每个bin中密度的信息。在模拟数据中,有200个观测值,每个观测值都有GPA和通过值(0,1)。

set.seed(435)
GPA <- round(rnorm(n = 200, mean =  3.2, sd = .7), 2) 
Pass <- rep(c(0, 1), 100)
data <- as.data.frame(cbind(GPA, Pass))

我认为我正在寻找的图表是以下两个选项的组合:

选项1:

ggplot(data, aes(x = GPA, fill = factor(Pass)))  +
geom_histogram(position = "fill", binwidth = .2, aes(y = ..count..)) +
scale_fill_manual(name = "Class Outcome", 
  labels = c("Did not Pass", "Passed"), values = c("#FFFFFF", "#333999")) +
labs(title = "Pass Rate by Incoming GPA", x = "Incoming GPA", y = "Proportion Passed")

Graph 1

在这个选项中,我可以看到在每个GPA区域通过的学生比例(使用白色来删除未通过的比例),但我没有任何关于每个学生中有多少学生的信息。箱中。

选项2:

ggplot(data, aes(x = GPA, fill =  ..count.., group = factor(Pass)))  +
geom_histogram(position = "fill", binwidth = .2, aes(y = ..count..), 
  color = "white", size = 1) +
scale_fill_gradient(name = "Number of Students", 
  low = "#99CCFF", high =  "#000099") +
labs(title = "Pass Rate by Incoming GPA", x = "Incoming GPA", y = "Proportion Passed") 

Graph 2

在这张图中,我可以得到比例梯度和比例,以包含每个箱内学生人数的信息,但是你无法区分通过和未通过的人之间的差异;他们都充满了相同的梯度。着色条以尝试按组区分并没有帮助。

有没有办法将scale_fill_gradient分组以应用于不同级别的因子,以便我可以使用不同的渐变来区分传递和未传递的比例?或者在某个地方有解决方法吗?

1 个答案:

答案 0 :(得分:0)

这是一个(可能是次优的)解决方法。如果我们有关于通过(p)的学生数量(n)和比例的信息,我们也有关于数量((n / p)*(1-p))和未通过的学生比例的信息(1-p) 。也许显示两者有点多余。也许它不是,但这是我的理由&#34;隐藏&#34;一套酒吧。

为什么不通过控制alpha来移除顶部栏?我们可以使用scale_alpha_manual删除顶部栏并隐藏图例中的显示。

ggplot(data, aes(x = GPA, fill =  ..count.., group = factor(Pass), alpha = factor(Pass)))  +
    geom_histogram(position = "fill", binwidth = .2, aes(y = ..count..), 
                   color = "white", size = 1) +
    scale_fill_gradient(name = "Number of Students", 
                        low = "#99CCFF", high =  "#000099") +
    labs(title = "Pass Rate by Incoming GPA", x = "Incoming GPA", y = "Proportion Passed") +
    scale_alpha_manual(values = c('0' = 0, '1' = 1),
                       guide = FALSE)

enter image description here

结束说明我希望这是一个评论,但我无法简明扼要地表达。