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

ggplot2 geom_col()不显示全部项:李克特量表绘图问题求助

问题原因与解决方案

核心问题原因

1. 仅显示4类Zustimmung的可能原因

  • 某一类别无对应数据:若该李克特选项没有受访者选择,ggplot会自动隐藏无数据的类别
  • 类别格式不一致:如果Zustimmung是字符型,同一类别的写法有差异(比如带空格、大小写不同),会被识别成不同类别,导致实际有效类别仅4个
  • 因子水平定义不完整:若Zustimmung是因子类型,但定义时漏掉了某一水平,ggplot也不会显示该水平

2. 排序混乱的原因

Zustimmung默认是字符型的话,ggplot会按字母顺序排序,而非李克特量表的逻辑顺序(比如从"完全不同意"到"完全同意");如果是因子但水平顺序设置错误,也会导致排序混乱


分步解决方案

1. 规范数据结构(使用数据框)

ggplot的标准输入格式是数据框,先把你的数据整理成数据框:

# 替换成你的实际变量名
Likert_df <- data.frame(
  Frage = Frage,
  Zustimmung = Zustimmung,
  Anzahl = Anzahl
)

2. 修复缺失类别问题

先检查类别完整性

# 查看Zustimmung的所有唯一值
unique(Likert_df$Zustimmung)
# 统计各类别的频数
table(Likert_df$Zustimmung)
  • 如果某类别频数为0,手动添加空行强制显示:
# 替换成你的5个李克特选项的实际内容
all_levels <- c("完全不同意", "不同意", "中立", "同意", "完全同意")
missing_levels <- setdiff(all_levels, unique(Likert_df$Zustimmung))

if(length(missing_levels) > 0) {
  add_rows <- data.frame(
    Frage = unique(Likert_df$Frage)[1],  # 对应你要展示的问题
    Zustimmung = missing_levels,
    Anzahl = 0
  )
  Likert_df <- rbind(Likert_df, add_rows)
}
  • 如果是格式不一致,统一修正字符:
# 去除空格、统一大小写
Likert_df$Zustimmung <- trimws(Likert_df$Zustimmung)
Likert_df$Zustimmung <- tolower(Likert_df$Zustimmung)

3. 修正排序问题

将Zustimmung转换为有序因子,指定李克特量表的逻辑顺序:

# 替换成你的5个选项的正确顺序
Likert_df$Zustimmung <- factor(
  Likert_df$Zustimmung,
  levels = c("完全不同意", "不同意", "中立", "同意", "完全同意"),
  ordered = TRUE
)

4. 优化绘图代码

用整理好的数据框绘图,适配李克特量表的可视化需求:

library(ggplot2)

ggplot(Likert_df, aes(x = Anzahl, y = Frage, fill = Zustimmung)) +
  geom_col(position = "stack") +  # 堆叠柱状图更适合展示李克特频数分布
  scale_fill_brewer(palette = "RdBu") +  # 用红蓝渐变区分同意/不同意倾向
  labs(title = "李克特量表调查结果", x = "频数", y = "调查问题", fill = "同意程度") +
  theme_minimal()

内容的提问来源于stack exchange,提问作者wiebke-blip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:50:11