You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 06:06:26