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

基于分组ID的单变量分组占比条形图绘制问题(R语言)

解决按分组展示答案占比的条形图问题

你之前的代码里,gather操作不小心把G1_ID也转换成了"item",这直接打乱了我们需要的分组逻辑——我们要的是每个G1_ID作为一个独立的条形,而不是把LMXnofive和G1_ID混在一起当成不同的分析项。我来帮你调整代码,精准实现你想要的效果:

第一步:数据预处理

先把需要的变量筛选出来,去掉缺失值,同时把LMXnofive(答案)和G1_ID(分组)转换成因子类型,这样ggplot能正确识别分类变量并按你预期的顺序展示:

library(tidyverse)

# 数据清洗:保留变量、去NA、转换因子(指定顺序避免自动乱序)
data_items <- Data_IlA %>%
  select(LMXnofive, G1_ID) %>%
  na.omit() %>%
  mutate(
    LMXnofive = factor(LMXnofive, levels = 0:7), # 固定0-7的答案顺序
    G1_ID = factor(G1_ID, levels = 1:6) # 固定1-6的分组顺序
  )

第二步:绘制分组占比条形图

现在直接用G1_ID作为x轴分组,LMXnofive作为填充色,用position = "fill"来展示每个分组内各答案的相对占比:

ggplot(data_items, aes(x = G1_ID)) +
  geom_bar(aes(fill = LMXnofive), position = "fill") +
  # 美化图表:添加清晰的标签
  labs(
    title = "各组LMXnofive答案占比分布",
    x = "分组ID",
    y = "占比(%)",
    fill = "答案分数"
  ) +
  coord_flip() # 若需要横向条形图则保留,不需要可删除

关键调整说明:

  • 去掉了错误的gather操作:我们不需要把G1_ID转成分析项,它本身就是分组维度
  • position = "fill"会自动将每个分组的条形高度统一为1(即100%),直观展示各答案的相对占比
  • 指定factor的levels参数:确保分组和答案的顺序是你预期的1-6、0-7,不会被ggplot自动按字母排序

这样生成的图表就会是:每个条形对应一个G1_ID组,条形内的不同颜色代表0-7分的占比,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者Andreas G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:52:40