如何用R分析多响应名义与分类变量并绘制堆叠条形图
R新手堆叠条形图问题解决
问题说明
我是R编程新手,尝试分析两组数据并生成堆叠条形图,但一直没成功。
原始数据
第一组:食物熟悉度数据
列名:Cookies、Pizza、Strawberry
共6行数据:
- Very Familiar; Familiar; Not Familiar
- Familiar; Very Familiar; Not Familiar
- Familiar; Not Familiar; Very Familiar
- Very Familiar; Familiar; Not Familiar
- Familiar; Very Familiar; Not Familiar
- Familiar; Not Familiar; Very Familiar
第二组:员工绩效提升因素数据
列名:training program、flexible work、communication
共7行数据(已统一态度选项大小写):
- Neutral; Agree; Agree
- Disagree; Agree; Agree
- Neutral; Disagree; Agree
- Agree; Disagree; Disagree
- Disagree; Agree; Agree
- Neutral; Disagree; Agree
- Agree; Disagree; Disagree
你的错误代码
rf<-r %>% select(Cookies,Pizza,Strawberry) %>% group_by (Cookies,Pizza,Strawberry) rfp <- ggplot(data=rf, aes(x=Cookies,Pizza,Strawberry))
问题分析
你的代码有两个核心问题:
group_by(Cookies,Pizza,Strawberry)是把三个列的组合作为分组,这不是堆叠条形图需要的逻辑——堆叠图需要统计每个类别下各选项的计数,应该对每一列单独统计频率,再把数据转为长格式(long format)。- ggplot的
aes()参数里不能同时放多个x轴变量,堆叠条形图的逻辑是:x轴是类别(比如食物名称/影响因素),y轴是计数,fill是熟悉度/态度选项。
正确实现步骤
第一组数据:食物熟悉度堆叠条形图
- 先构造原始数据框:
# 构造熟悉度数据 familiarity_data <- data.frame( Cookies = c("Very Familiar", "Familiar", "Familiar", "Very Familiar", "Familiar", "Familiar"), Pizza = c("Familiar", "Very Familiar", "Not Familiar", "Familiar", "Very Familiar", "Not Familiar"), Strawberry = c("Not Familiar", "Not Familiar", "Very Familiar", "Not Familiar", "Not Familiar", "Very Familiar") )
- 把宽格式数据转为长格式(ggplot对长格式数据更友好):
library(tidyverse) familiarity_long <- familiarity_data %>% pivot_longer(cols = everything(), names_to = "Food", values_to = "Familiarity")
- 统计每个食物下各熟悉度的人数:
familiarity_count <- familiarity_long %>% count(Food, Familiarity)
- 绘制堆叠条形图:
ggplot(familiarity_count, aes(x = Food, y = n, fill = Familiarity)) + geom_bar(stat = "identity") + labs(title = "食物熟悉度分布", x = "食物", y = "人数", fill = "熟悉度") + theme_minimal()
第二组数据:员工绩效提升因素堆叠条形图
- 构造原始数据框(统一态度选项的大小写,避免统计错误):
# 构造绩效提升数据 performance_data <- data.frame( `training program` = c("Neutral", "Disagree", "Neutral", "Agree", "Disagree", "Neutral", "Agree"), `flexible work` = c("Agree", "Agree", "Disagree", "Disagree", "Agree", "Disagree", "Disagree"), communication = c("Agree", "Agree", "Agree", "Disagree", "Agree", "Agree", "Disagree") )
- 转为长格式:
performance_long <- performance_data %>% pivot_longer(cols = everything(), names_to = "Factor", values_to = "Attitude")
- 统计每个因素下各态度的人数:
performance_count <- performance_long %>% count(Factor, Attitude)
- 绘制堆叠条形图:
ggplot(performance_count, aes(x = Factor, y = n, fill = Attitude)) + geom_bar(stat = "identity") + labs(title = "员工绩效提升因素态度分布", x = "影响因素", y = "人数", fill = "态度") + theme_minimal()
内容的提问来源于stack exchange,提问作者Opeyemi Okolie
相关产品推荐
相关产品推荐

