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绘制结果)

数据集说明
数据集包含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
相关产品推荐
相关产品推荐

