ggplot2中等长堆叠条形图实现:保留结果序列的方法
解决方案
可以实现,核心是通过指定堆叠顺序来绑定cycle序列和对应的outcome,同时用val保证每个cycle的高度为1。修改后的代码如下:
# setup library(ggplot2) library(dplyr) set.seed(0) # test data data.frame( cycle = factor(rep(1:8,2), levels = 1:8), val = 1, id = factor(rep(1:2, each = 8)), outcome = factor(paste("Outcome", sample(1:8,16,T)), levels = paste("Outcome",1:8)) ) %>% # 修正后的绘图代码 ggplot(aes(x = id, y = val, fill = outcome, order = cycle)) + geom_bar(stat = "identity", position = position_stack(reverse = TRUE), width = 0.99) + coord_flip() + scale_y_continuous(breaks = seq(0.5, 8.5, 1), labels = 1:8) + ylab("cycle")
关键改动说明:
- 将y轴映射为
val:每个cycle对应高度1,彻底避免了用cycle作为y轴时的求和问题。 - 添加
order = cycle:强制ggplot按照cycle的顺序堆叠条形,确保cycle序列连续,每个outcome和对应的cycle严格绑定,不会被fill的类别顺序打乱。 - 自定义y轴刻度:通过
scale_y_continuous把刻度标签设置为cycle序号,让坐标轴显示更贴合需求,直观展示每个堆叠部分对应的cycle。 - 保留
position_stack(reverse = TRUE):维持你原本需要的堆叠方向,保证cycle从1到8的顺序在视觉上连续。
内容的提问来源于stack exchange,提问作者alex_555
相关产品推荐
相关产品推荐

