如何在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
相关产品推荐
相关产品推荐

