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

R语言ggplot堆叠柱状图报错:提示2014等列不存在求助

解决堆叠柱状图报错:“2014、2015等列不存在”的问题

问题根源

你的代码存在两处关键错误,导致了列不存在的报错:

  • 数据框定义未闭合:创建data.frame时最后缺少闭合的),使数据结构损坏,R无法正确识别Year列及其他列。
  • 对象名称不匹配:你将数据框赋值给了data,但后续处理时调用了不存在的dat对象,导致R误将年份值当作列名查找。

修正后的完整代码

library(dplyr)
library(tidyr)
library(ggplot2)

# 补全data.frame的闭合括号,确保数据结构正确
data <- data.frame(
  Emm1.0 = c(5,2,0,0,0,0,2,0), 
  Emm3.1 = c(1,1,0,0,0,0,0,0), 
  Emm6.4 = c(1,0,0,0,0,0,0,0),
  Emm9.0 = c(0,0,0,0,0,0,0,1),
  Emm11.0 = c(0,2,4,3,0,0,0,0),
  Emm22.0 = c(1,0,0,0,0,1,0,0),
  Emm28.0 = c(0,0,0,0,0,1,0,0),
  Emm41.1 = c(1,0,1,0,0,0,0,0),
  Emm49.0 = c(2,0,0,0,0,2,4,8),
  Emm53.0 = c(0,0,0,0,1,0,0,0),
  Emm59.0 = c(0,1,1,3,0,0,0,1),
  Emm74.0 = c(2,0,0,0,1,2,1,2),
  Emm76.0 = c(2,0,0,0,1,1,1,1),
  Emm77.0 = c(0,0,0,0,0,0,1,1),
  Emm81.0 = c(1,0,0,0,1,3,3,0),
  Emm82.0 = c(1,0,0,0,0,0,1,0),
  Emm83.1 = c(0,0,1,0,0,1,0,0),
  Emm87.0 = c(0,1,0,0,0,0,0,0),
  Emm89.0 = c(0,0,1,0,1,0,0,0),
  Emm91.0 = c(0,0,0,0,1,0,0,0),
  Emm101.0 = c(1,0,1,0,0,0,0,0),
  Emm114.0 = c(0,0,0,1,0,0,0,0),
  Emm118.0 = c(1,0,0,0,0,0,0,0),
  Year = as.factor(c("2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"))
) # 补全这个闭合括号

# 将dat改为data,匹配数据框名称;同时推荐用tidyr的pivot_longer替代旧版gather
data_long <- data %>%
  pivot_longer(cols = -Year, names_to = "Emmtype", values_to = "Frequency")

# 绘制堆叠柱状图
ggplot(data_long, aes(x = Year, y = Frequency, fill = Emmtype)) + 
  geom_col(position = "stack") # stat="identity"是geom_col的默认值,可省略

额外说明

  • pivot_longer是tidyr包的新版函数,比gather语法更清晰,更易维护。
  • geom_col默认就使用stat="identity",所以可以省略该参数,简化代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:51:17