我试图通过不同得分水平的人口统计数据来计算行百分比--在我的数据中,这将是%的白人(或%的黑人,或%的男性,或%的受教育程度为2的人,等等)得分为0(或1、2或3)--然后使用它来创建一个大图。
因此,在我下面的示例数据中,人种== 1(即白人)中8.33%的人得分为0,25%的人得分为1,25%的人得分为2,41.67%的人得分为3。
然后,最终目标将是得到某种类型的条形图,其中4个水平的'分数'是横跨x轴,人口统计的各种比较运行下来的y轴。一些看起来像这样的视觉效果,但与'分数'的水平,而不是教育水平的顶部:
.
我已经有了一些代码来生成实际的数字,我已经在其他示例中使用了外部/已经计算过的百分比:
ggplot(data, aes(x = percent, y = category, fill = group)) +
geom_col(orientation = "y", width = .9) +
facet_grid(group~score_var,
scales = "free_y", space = "free_y") +
labs(title = "Demographic breakdown of 'Score'") +
theme_bw()
我正在努力找出计算这些行百分比的最佳方法,大概是使用group_by()
和summarize
,然后以一种可以绘制它们的方式存储或配置它们。
d <- structure(list(race = c(1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3, 1,
1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2,
3, 3), gender = c(0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1,
0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1
), education = c(1, 3, 3, 2, 1, 3, 2, 3, 4, 4, 2, 3, 3, 2, 3,
4, 1, 3, 1, 3, 3, 2, 1, 3, 2, 3, 4, 4, 2, 3, 3, 2, 3, 4, 1, 3
), score = c(1, 2, 2, 1, 2, 3, 3, 2, 0, 0, 1, 2, 1, 3, 0, 0,
3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 2, 3, 1, 3, 3, 0, 1, 2, 2, 0)), row.names = c(NA,
-36L), spec = structure(list(cols = list(race = structure(list(), class = c("collector_double",
"collector")), gender = structure(list(), class = c("collector_double",
"collector")), education = structure(list(), class = c("collector_double",
"collector")), score = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), delim = ","), class = "col_spec"), problems = <pointer: 0x000001bd978b0df0>, class = c("spec_tbl_df",
"tbl_df", "tbl", "data.frame"))
2条答案
按热度按时间flseospp1#
这可能会帮助您开始:
编辑
将所有字符放在一起,可以得到一个更大的图形:
请注意:我已经改变了性别的代码。
db2dz4w82#
从@王志强出色的第一关中得到灵感,我终于想出了一个解决办法。我仍然需要改变标签的顺序(把教育水平按顺序排列,把种族变量移到图的顶部),但这基本上是我所设想的。