如何在RStudio中将多组条形图转换为百分比条形图
代码报错修正及百分比条形图实现方案
报错对应修改点
- 所有「closure类型的对象不可取子集」报错:由命名冲突导致,R内置有
data()函数,若你未将导入的数据集重命名直接使用data调用,R会将其识别为函数而非数据框,无法提取列。将你导入的原始数据集重命名为beetle_df之类的非内置函数名称,所有代码中调用数据的data统一替换为新名称即可,注意要先完成数据导入再运行后续处理代码。 - 「找不到对象'lvls'」「找不到对象'lvls2'」报错:属于上游错误衍生问题,修正上述命名冲突后会自动解决。
- 「找不到函数"ggplot"」报错:未加载ggplot2包,运行前先执行
library(ggplot2),未安装的话先执行install.packages("ggplot2")完成安装。
百分比条形图调整
你当前代码的geom_bar默认生成计数条形图,要输出百分比格式,将position参数改为"fill",配合scales包可将y轴显示为百分比格式,修正后完整代码如下:
# 加载依赖包 library(ggplot2) library(stringr) library(scales) # 替换为你实际导入的数据集名称,重命名避免冲突 beetle_df <- 原始数据集名称 # 处理甲虫数量字段为有序因子 beetle_df$Number.of.Beetle <- trimws(beetle_df$Number.of.Beetle) lvls <- unique(beetle_df$Number.of.Beetle) lvls <- str_sort(lvls, numeric = TRUE) beetle_df$Number.of.Beetle <- factor(beetle_df$Number.of.Beetle, levels = lvls) # 处理建筑年龄字段为有序因子 lvls2 <- unique(beetle_df$Building.Age) lvls2 <- lvls2[c(2, 3, 1)] beetle_df$Building.Age <- factor(beetle_df$Building.Age, levels = lvls2) # 绘制百分比条形图 ggplot(beetle_df, aes(x = Locality.Division))+ geom_bar(aes(fill = Number.of.Beetle), position = "fill")+ facet_wrap(~ Building.Age) + scale_y_continuous(labels = percent_format()) + labs(title = "甲虫数量、区域划分与建筑龄的对比", subtitle ="建筑龄", y = "占比")
原代码输出的计数结果图:
内容的提问来源于stack exchange,提问作者Sajidha Mohammed
相关产品推荐
相关产品推荐

