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
相关产品推荐
相关产品推荐

