如何调整R语言堆叠条形图分段顺序:--至++排列且NA居右
调整堆叠条形图分段顺序的解决方法
现有R语言代码生成堆叠条形图,需要调整横向条形图的分段顺序,使每个条内从左到右依次为--、-、0、+、++,NA位于最右侧。以下是实现方案:
修改后的完整代码
library(dplyr) library(ggplot2) library(tidyr) size <- 100 df <- data.frame(item1 = sample(c(1:5, 1:5, 99), size = size, replace = TRUE), item2 = sample(c(1:5, 1:4, 99), size = size, replace = TRUE), item3 = sample(c(1:5, 1:3, 99), size = size, replace = TRUE), item4 = sample(c(1:5, 1:5, 99), size = size, replace = TRUE), item5 = sample(c(1:5, 1:4, 99), size = size, replace = TRUE)) # 堆叠条形图(调整分段顺序) df %>% pivot_longer(cols = starts_with("item")) %>% group_by(name) %>% count(value) %>% mutate(perc = 100 / sum(n) * n) %>% ungroup() %>% # 明确指定因子水平与对应标签的顺序 mutate(value = factor(value, levels = c(1, 2, 3, 4, 5, 99), labels = c("--", "-", "0", "+", "++", "NA"))) %>% ggplot(aes(x = name, y = perc, fill = value)) + # 反转堆叠顺序,配合coord_flip实现左到右的期望顺序 geom_col(position = position_stack(reverse = TRUE)) + coord_flip()
关键调整说明
- 因子水平定义:通过
factor()明确指定levels的顺序为c(1,2,3,4,5,99),对应标签--、-、0、+、++、NA,确保数据的分类顺序与展示需求匹配。 - 堆叠顺序控制:添加
position = position_stack(reverse = TRUE)参数,由于coord_flip()会翻转坐标系,反转堆叠顺序后,横向条形图的分段会从左到右按照因子水平的顺序排列,最终实现--在最左侧、NA在最右侧的效果。
内容的提问来源于stack exchange,提问作者D. Studer
相关产品推荐
相关产品推荐

