R语言:如何为5个量表4个类别的数据绘制堆叠条形图
错误点说明
- 语法错误:倒数第二行的管道符拼写错误,应为
%>%而非% - 逻辑不匹配:你提供的示例数据中各量表列的值已经是
Cat1-Cat4字符串类型,无法用数值比较规则做分类判定,会直接报错 - 因子水平错误:仅有5个量表,但你给Scale设置了6个因子水平,还包含空值,会导致匹配后出现缺失值
正确实现代码
数据预处理
library(tidyverse) # 替换为你的真实数据即可,此处保留示例数据供测试 df <- tribble( ~ID, ~scale1, ~scale2, ~scale3, ~scale4, ~scale5, "1", "Cat1", "Cat2", "Cat4", "Cat1", "Cat2", "2", "Cat3", "Cat3", "Cat1", "Cat2", "Cat3", "3", "Cat4", "Cat1", "Cat2", "Cat3", "Cat2", "4", "Cat1", "Cat4", "Cat2", "Cat4", "Cat4", "5", "Cat2", "Cat1", "Cat3", "Cat1", "Cat1") df_clean <- df %>% select(ID, scale1:scale5) %>% pivot_longer(cols = scale1:scale5, names_to = "Scale", values_to = "Category") %>% mutate( # 直接设置分类的因子顺序 Category = factor(Category, levels = c("Cat4","Cat3","Cat2","Cat1")), # 按需修改量表的显示名称,5个量表对应5个标签即可 Scale = factor(Scale, levels = paste0("scale", 1:5), labels = c("数学","物理","计算机","体育","英语")) )
绘制堆叠条形图
ggplot(df_clean, aes(x = Scale, fill = Category)) + # 计数堆叠条形图,position设为"fill"可改为百分比堆叠图 geom_bar(position = "stack") + labs(x = "量表名称", y = "样本数量", fill = "分类") + theme_bw()
特殊情况说明
如果你的真实原始数据中,量表列存储的是1-4的数值而非Cat开头的字符串,可改用以下预处理逻辑:
df_clean <- df %>% select(ID, scale1:scale5) %>% pivot_longer(cols = scale1:scale5, names_to = "Scale", values_to = "Value") %>% mutate( Value = as.numeric(Value), Category = case_when( Value >=4 ~ "Cat4", Value >=3 & Value <4 ~ "Cat3", Value >=2 & Value <3 ~ "Cat2", Value <2 ~ "Cat1", TRUE ~ "None" ), Category = factor(Category, levels = c("Cat4","Cat3","Cat2","Cat1")), Scale = factor(Scale, levels = paste0("scale", 1:5), labels = c("数学","物理","计算机","体育","英语")) )
内容的提问来源于stack exchange,提问作者Hani
相关产品推荐
相关产品推荐

