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

R中geom_col(position=dodge)仅绘制最大值而非求和值的问题解决

R中geom_col(position="dodge")仅显示最大值而非求和值的问题解决

我在R中使用geom_col并设置position=dodge时,图表仅绘制了数据中的最大值,而非按预期对数值求和。

所用代码

ggplot(data=enroll2, aes(x=ACTUAL_ENRL, y=DEPT, fill=Term)) + 
  geom_col(position="dodge", width = 0.60)

(注:原代码中aes()括号未闭合,已修正)

当前运行结果

当前生成的图表

目标样式(同数据集Python绘制结果)

目标样式图表(Python绘制)

数据集说明

数据集包含ACTUAL_ENRL(招生人数)、DEPT(院系)、Term(学期)字段,每个DEPT-Term组合存在多条记录。


问题原因

geom_col默认采用stat="identity",即直接使用原始数据的数值绘图。当同一DEPT-Term分组下有多条ACTUAL_ENRL记录时,这些柱状图会重叠显示,视觉上只能看到最上层的最大值,而非求和结果。

解决方法

有两种可行方案:

方案1:先聚合数据再绘图

先通过数据处理工具按DEPT和Term分组求和,再用聚合后的数据绘图:

library(dplyr)

# 分组求和
enroll_summary <- enroll2 %>%
  group_by(DEPT, Term) %>%
  summarise(total_enrl = sum(ACTUAL_ENRL, na.rm = TRUE))

# 绘制分组柱状图
ggplot(data=enroll_summary, aes(x=total_enrl, y=DEPT, fill=Term)) + 
  geom_col(position="dodge", width = 0.60)

方案2:在geom_col中指定聚合统计

直接在geom_col中使用stat="summary"并指定求和函数,绘图时自动完成聚合:

ggplot(data=enroll2, aes(x=ACTUAL_ENRL, y=DEPT, fill=Term)) + 
  geom_col(position="dodge", width = 0.60, stat="summary", fun=sum)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:35:28