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

如何用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))

问题分析

你的代码有两个核心问题:

  1. group_by(Cookies,Pizza,Strawberry)是把三个列的组合作为分组,这不是堆叠条形图需要的逻辑——堆叠图需要统计每个类别下各选项的计数,应该对每一列单独统计频率,再把数据转为长格式(long format)。
  2. ggplot的aes()参数里不能同时放多个x轴变量,堆叠条形图的逻辑是:x轴是类别(比如食物名称/影响因素),y轴是计数,fill是熟悉度/态度选项。

正确实现步骤

第一组数据:食物熟悉度堆叠条形图

  1. 先构造原始数据框:
# 构造熟悉度数据
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")
)
  1. 把宽格式数据转为长格式(ggplot对长格式数据更友好):
library(tidyverse)

familiarity_long <- familiarity_data %>%
  pivot_longer(cols = everything(), names_to = "Food", values_to = "Familiarity")
  1. 统计每个食物下各熟悉度的人数:
familiarity_count <- familiarity_long %>%
  count(Food, Familiarity)
  1. 绘制堆叠条形图:
ggplot(familiarity_count, aes(x = Food, y = n, fill = Familiarity)) +
  geom_bar(stat = "identity") +
  labs(title = "食物熟悉度分布", x = "食物", y = "人数", fill = "熟悉度") +
  theme_minimal()

第二组数据:员工绩效提升因素堆叠条形图

  1. 构造原始数据框(统一态度选项的大小写,避免统计错误):
# 构造绩效提升数据
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")
)
  1. 转为长格式:
performance_long <- performance_data %>%
  pivot_longer(cols = everything(), names_to = "Factor", values_to = "Attitude")
  1. 统计每个因素下各态度的人数:
performance_count <- performance_long %>%
  count(Factor, Attitude)
  1. 绘制堆叠条形图:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:30:16