我正在尝试制作一张图表,显示按性别种族划分的平均年龄。图表本身应按最低平均年龄到最高平均年龄的顺序显示此信息,并按总体性别分组。
我正在处理按工作类别、性别/种族、性别和平均年龄分组的数据集。我已经能够使用以下代码按性别成功订购:
rsltProf = rslt %>%
filter(group == "Professionals" & avg > 0) %>%
group_by(gender) %>%
arrange(avg, .by_group = TRUE)
str(rsltProf$genXrce)
我得到以下输出:
group genXrce gender avg
1 Professionals Female-Asian Female 33.25397
2 Professionals Female-Other Female 37.55000
3 Professionals Female-White Female 39.89632
4 Professionals Female-Black Female 39.94118
5 Professionals Male-Other Male 32.80000
6 Professionals Male-Asian Male 37.86667
7 Professionals Male-Black Male 38.69767
8 Professionals Male-White Male 38.85294
Factor w/ 9 levels "Female-Asian",..: 4 2 3 1 9 7 8 6
很好,这正是我想要的。然而,当我用 ggplot 绘制它时,它会产生以下结果:
很明显,这是因为 ggplot2 是按因素的顺序而不是排列的数据帧的顺序绘图的。我尝试了多种方法根据上面代码中的排列方式重新调整 genXrce 的级别,但均无济于事,包括重新调整级别、变异和重新排序。
我的问题是:如何重新排序/排列数据,使 ggplot2 生成一个图表,该图表给出按性别分组的升序平均值,就像我制作的表格一样?非常感谢任何建议。
编辑 1: 在下面的评论中,建议使用 forcats 或类似的函数通过 ggplot 排列图形。像这样的例子:
ggplot(data = rsltProf, mapping = aes(x =fct_reorder(!!as.name(genXrce), avg), y = avg, fill = genXrce))
不过,这样会把所有的genXrce因素按平均排列,不再按性别分开。需要明确的是,条形图顺序应与表格相同 --> 女性-白人、女性-黑人、女性-其他、女性-亚洲人、男性-白人、男性-黑人....
最佳答案
给定你的数据框 rsltProf
,其中的行按所需的顺序排列,将 genXrce
转换为一个因子,其水平由该列的行顺序指定:
library(dplyr)
library(ggplot2)
rsltProf %>%
mutate(genXrce = factor(genXrce, levels = unique(.$genXrce))) %>%
ggplot(aes(genXrce, avg)) + geom_col()
关于重新排序分组变量中的因素,以便可以使用 ggplot2 按顺序绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56878878/