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

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的数值
  • 目标效果参考:Excel生成的示例效果图
错误尝试

使用如下代码绘图,输出结果不符合预期,所有条形高度均为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:45:25