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

如何使用R为调查分类数据绘制分组条形图?

分组条形图实现方案

第一步:修正原有代码笔误

你的现有代码存在两处笔误,先修正后再计算百分比:如果你的Q1变量的缺失值标记确实存储在data$Q11列中,可保留原Q1[data$Q11 == -99] <- NA的写法。

# 处理Q1数据
Q1[data$Q1 == -99] <- NA
Q1s <- factor(Q1, labels = c("Strongly Disagree", "Disagree", "Neither Agree nor Disagree", "Agree", "Strongly Agree"))
Q1_PERCENTAGE <- prop.table(table(Q1s)) * 100

# 处理Q2数据
Q2[data$Q2 == -99] <- NA
Q2s <- factor(Q2, labels = c("Strongly Disagree", "Disagree", "Neither Agree nor Disagree", "Agree", "Strongly Agree"))
Q2_PERCENTAGE <- prop.table(table(Q2s)) * 100

第二步:基础绘图包实现分组条形图

barplot函数的beside参数设为TRUE即可生成并排的分组条形图,需要先把两个问题的百分比合并为矩阵:

# 按行合并两个问题的百分比,行对应问题,列对应李克特选项
percent_matrix <- rbind(Q1_PERCENTAGE, Q2_PERCENTAGE)
# 转置矩阵,让每个分组对应不同态度选项
percent_matrix <- t(percent_matrix)

# 绘制分组条形图
barplot(percent_matrix, 
        beside = TRUE, # 核心参数:TRUE为分组条形图,FALSE为堆叠条形图
        col = c("#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FFEAA7"), # 自定义选项配色
        legend.text = rownames(percent_matrix),
        args.legend = list(x = "top", bty = "n"),
        ylab = "占比(%)",
        xlab = "问题",
        main = "不同问题的态度分布对比")

可选:ggplot2实现分组条形图

如果需要更灵活的样式调整,可以用ggplot2绘制:

library(ggplot2)
library(tidyr)

# 把矩阵转为ggplot2要求的长格式数据框
df <- as.data.frame(percent_matrix)
df$option <- rownames(df)
df_long <- pivot_longer(df, cols = c("Q1_PERCENTAGE", "Q2_PERCENTAGE"), names_to = "question", values_to = "percentage")

# 绘图
ggplot(df_long, aes(x = question, y = percentage, fill = option)) +
  geom_col(position = position_dodge(0.9), width = 0.8) +
  scale_fill_brewer(palette = "Set2", name = "态度选项") +
  labs(x = "问题", y = "占比(%)", title = "不同问题的态度分布对比") +
  scale_x_discrete(labels = c("Q1_PERCENTAGE" = "问题1", "Q2_PERCENTAGE" = "问题2")) +
  theme_minimal() +
  theme(legend.position = "top")

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:48:00