You need to enable JavaScript to run this app. 如何在RStudio中将多组条形图转换为百分比条形图
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 08:45:03