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

R中ggplot绘图无法按资助总额排序,group_by使用有误?

问题分析与修正方案

你的代码主要有两个核心问题,导致图表没按总资助额排序:

1. 未完成机构级别的资助额汇总

你只执行了group_by(ORG_NAME),但没有计算每个机构的总资助额,数据还是单条资助的记录,后续排序也是按单条资助金额来排,完全没达到"按机构总金额汇总"的目的。

2. 没有修改分类变量的排序规则

ggplot对分类变量(比如这里的ORG_NAME)默认按字母顺序排列,哪怕你给数据框排了序,ggplot还是会遵循因子的原始水平顺序,必须手动把机构名转为按总金额排序的因子。


修正后的完整代码

# 先确保加载必要的包(如果没装tidyverse,先跑 install.packages("tidyverse"))
library(tidyverse)

# 筛选300万美元以上的资助记录
mass_nih_big_grants <- filter(mass_NIH_data_2023_desc, TOTAL_COST >= 3000000) 

# 分组汇总+排序+重置因子水平
mass_nih_big_grantees <- mass_nih_big_grants %>%
  # 按机构分组
  group_by(ORG_NAME) %>%
  # 计算每个机构的总资助额,命名为TOTAL_SUM
  summarize(TOTAL_SUM = sum(TOTAL_COST)) %>%
  # 按总资助额降序排序
  arrange(desc(TOTAL_SUM)) %>%
  # 把机构名转为按总金额排序的因子(关键:让ggplot按这个顺序绘图)
  mutate(ORG_NAME = fct_reorder(ORG_NAME, TOTAL_SUM))

# 绘制条形图
plot_mass_nih_big_grantees <- ggplot(mass_nih_big_grantees, aes(x=ORG_NAME, y=TOTAL_SUM)) +
  geom_bar(stat="identity", fill="dodgerblue") +
  coord_flip() +
  theme_light()  

# 展示图表
plot_mass_nih_big_grantees

关键修正点说明

  • summarize(TOTAL_SUM = sum(TOTAL_COST)):这一步是核心,把每个机构的多条资助记录合并成一条总金额记录
  • fct_reorder(ORG_NAME, TOTAL_SUM):用forcats包的函数重置因子水平,让ORG_NAME的顺序由TOTAL_SUM的大小决定,ggplot绘图时就会遵循这个顺序
  • 绘图时y轴用汇总后的TOTAL_SUM,而不是原始的单条资助额TOTAL_COST

内容的提问来源于stack exchange,提问作者Lisa Williams

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:15:57