我的例子:我正在尝试创建一个图表来捕获班级通过率如何随传入的 GPA 变化。理想情况下,这将采用直方图形式,我可以快速编辑 binwidth,以查看不同 GPA bin 下通过率的变化情况,并且可以合并有关每个 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")
在此选项中,我可以看到每个 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")
在这张图中,我可以得到尺度梯度和比例,以包含每个箱内学生人数的信息,但你无法区分通过和未通过的人之间的区别;它们都充满了相同的渐变比例。对条形图进行着色来尝试按组进行区分并没有帮助。
有没有办法对
scale_fill_gradient
进行子集化以应用于不同级别的因子,以便我可以使用不同的梯度来区分通过和未通过的比例?或者有什么办法可以解决吗?
这是一个(可能不是最佳的)解决方法。如果我们有关于通过的学生数量 (n) 和比例 (p) 的信息,我们也有关于数量 ((n/p) * (1-p)) 和未通过的学生比例 (1-p) 的信息。也许两者都显示有点多余。也许不是,但这就是我“隐藏”一组酒吧的理由。
为什么不直接通过控制
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)
尾注我更希望这是一条评论,但我无法足够简洁地表达它。
我建议使用
scale_color_hue
。您可以选择 360 色轮上的色调范围、颜色强度和亮度。离散值映射到该比例函数。