基于分组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.
相关产品推荐
相关产品推荐

