按因子对scale_fill_gradient进行子集化或按因子在直方图的计数条内添加密度梯度

问题描述 投票:0回答:2

我的例子:我正在尝试创建一个图表来捕获班级通过率如何随传入的 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")

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
进行子集化以应用于不同级别的因子,以便我可以使用不同的梯度来区分通过和未通过的比例?或者有什么办法可以解决吗?

r ggplot2
2个回答
0
投票

这是一个(可能不是最佳的)解决方法。如果我们有关于通过的学生数量 (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)

enter image description here

尾注我更希望这是一条评论,但我无法足够简洁地表达它。


0
投票

我建议使用

scale_color_hue
。您可以选择 360 色轮上的色调范围、颜色强度和亮度。离散值映射到该比例函数。

© www.soinside.com 2019 - 2024. All rights reserved.