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

如何在ggplot堆叠条形图中展示变量标签与值标签

解决方法

核心修改点

  • 构造变量名到变量标签的映射,替换x轴的Q01/Q02等标识
  • 将选项值转换为带值标签的因子,自动生成对应图例
  • 修正堆叠文本的标签配置,正确显示百分比

完整可运行代码

library(tidyverse)
library(labelled)
data <- haven::read_spss("http://staff.bath.ac.uk/pssiw/stats2/SAQ.sav")

# 提前提取Q01-Q04的变量标签映射
var_label_map <- map_chr(data %>% select(Q01:Q04), var_label)

data %>% 
  select(Q01:Q04) %>% 
  gather(key = "question", value = "option") %>% 
  mutate(
    # 替换问题名为完整变量标签
    question = var_label_map[question],
    # 转换选项值为对应值标签的因子
    option = as_factor(option)
  ) %>% 
  group_by(question, option) %>% 
  tally() %>% 
  mutate(
    n = round(n/sum(n)*100, 2)
  ) %>% 
  ggplot(aes(x = question, y = n, fill = option)) + 
  geom_col() + 
  geom_text(aes(label = paste0(n, "%")), position = position_stack(vjust = 0.5), size = 3) + 
  coord_flip() +
  theme(aspect.ratio = 1/3) + 
  scale_fill_brewer(palette = "Set2", name = "回答选项")

原代码错误说明

你之前使用as_factor(n)属于参数误用:n是你计算出的百分比数值,本身不需要转因子,我们需要转成带标签因子的是存储选项值的value字段,以及存储问题名的key字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:00:00