ggplot2堆叠条形图如何按65岁年龄组Dx值排序州类别
实现方法
你当前的代码是按每个州所有年龄组的死亡数总和排序州名的,要改成按65岁组的Dx值排序,只需要调整fct_reorder的排序规则即可,不需要之前分组求和的冗余步骤。
修改后可直接运行的代码
library(tidyverse) # 此处替换为你自己的CAPS_2019数据集即可,下面是你提供的示例测试数据 CAPS_2019 <- structure(list(Age = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("30", "50", "65"), class = "factor"), Dx = c(3.057, 7.847, 17.157, 2.851, 8.861, 21.885, 2.521, 7.889, 21.328), PopName = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), .Label = c("AK", "AL", "AR"), class = "factor")), row.names = c(NA, -9L), class = c("tbl_df", "tbl", "data.frame")) CAPS_2019 %>% ggplot(aes( x = fct_reorder( .f = PopName, .x = Dx, # 只取每个州对应65岁年龄组的Dx值作为排序依据 .fun = ~.x[Age == "65"] ), y = Dx, fill = factor(as.character(Age)) )) + geom_col(position = position_stack(reverse = TRUE)) + theme_classic()+ coord_flip()+ labs(x = "State", y = "Deaths (%)", face = "bold", fill = "Age")
效果说明
用你提供的示例数据运行结果:
- AK州65岁组Dx值17.157最小,排在y轴最上方
- AR州65岁组Dx值21.328,排在中间
- AL州65岁组Dx值21.885最大,排在y轴最下方
横向观察65岁年龄组对应的条形长度,从左到右严格递增,符合排序要求。如果需要反过来从大到小排列,只要在fct_reorder里加参数.desc = TRUE即可。
内容的提问来源于stack exchange,提问作者Nader Mehri
相关产品推荐
相关产品推荐

