R语言如何基于汇总数据框使用ggplot2的geom_bar绘制条形图
问题背景
现有记录运动员受伤情况的数据框df,结构如下:
df <- data.frame(number_of_injuries = c(1,2,3,4,5,6), number_of_people = c(73,52,43,12,7,2), stringsAsFactors=FALSE)
需求说明
需要使用ggplot2包的geom_bar或geom_histogram基于上述数据绘制条形图:
- x轴展示受伤次数字段
number_of_injuries的分组 - y轴对应该受伤次数的人数字段
number_of_people的数值 - 目标效果参考:

错误尝试
使用如下代码绘图,输出结果不符合预期,所有条形高度均为1,未映射实际人数值:
ggplot(df, aes(number_of_injuries)) + geom_bar(stat = "count")
错误输出效果:
解决方案
核心问题:geom_bar()默认的stat="count"逻辑是自动统计每个x值对应的数据行数作为柱高,适用于原始明细数据;你手中的数据集已经是预汇总好的频次结果,不需要ggplot做自动计数,直接指定y轴映射、使用stat="identity"读取数据集中的现成值即可。
正确代码:
library(ggplot2) ggplot(df, aes(x = factor(number_of_injuries), y = number_of_people)) + geom_bar(stat = "identity")
参数说明:
factor(number_of_injuries):将受伤次数转为离散分类变量,避免x轴按连续数值规则生成多余空白刻度stat="identity":告知geom_bar直接使用aes中映射的y列数值作为柱高,不再执行自动计数逻辑
如果需要匹配示例Excel图的视觉样式,可以补充样式调整参数:
ggplot(df, aes(x = factor(number_of_injuries), y = number_of_people)) + geom_bar(stat = "identity", fill = "#4472C4") + # 匹配Excel默认柱形蓝色 labs(x = "受伤次数", y = "人数") + theme_bw()
内容的提问来源于stack exchange,提问作者logjammin
相关产品推荐
相关产品推荐

