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

ggplot泳道图按分组变量排序Y轴并添加分组标签

按group排序Y轴并添加侧边分组标签的解决方案

1. 预处理数据:调整subject的因子顺序

要让Y轴按group分组排序,首先需要把subject转换为有序因子,确保同一group的subject集中排列:

# 提取每个subject对应的唯一group,按group+subject排序
subject_order <- dataset %>%
  distinct(subject, group) %>%
  arrange(group, subject)

# 将subject转为因子,水平顺序按上述排序结果设置
dataset$subject <- factor(dataset$subject, levels = subject_order$subject)

2. 绘制带分组标签的泳道图

方法一:用ggh4x包快速实现侧边分组标签(推荐)

ggh4x的facet_grid2可以在Y轴左侧自动添加分组标签,且不会拆分图表面板:

# 先安装并加载包
install.packages("ggh4x")
library(ggh4x)

ggplot(dataset, aes(x = diff + 1, y = subject, group = p)) +
  geom_col(aes(fill = as.factor(exdose)), position = position_stack(reverse = TRUE)) +
  # 左侧添加分组标签,不拆分Y轴刻度
  facet_grid2(group ~ ., scales = "free_y", space = "free_y",
              strip = strip_position("left")) +
  # 优化标签样式
  theme(strip.text.y.left = element_text(angle = 0, hjust = 1, size = 10),
        strip.background.y = element_rect(fill = "#f0f0f0")) +
  labs(fill = "exdose")

方法二:无需额外包,手动添加分组标签

如果不想安装新包,可以手动计算分组位置,用annotate添加标签和背景:

# 计算每个group对应的Y轴位置范围
group_ranges <- subject_order %>%
  group_by(group) %>%
  summarise(
    y_low = min(as.integer(subject)) - 0.5,
    y_high = max(as.integer(subject)) + 0.5
  )

ggplot(dataset, aes(x = diff + 1, y = subject, group = p)) +
  geom_col(aes(fill = as.factor(exdose)), position = position_stack(reverse = TRUE)) +
  # 添加分组背景色块
  annotate("rect", xmin = -Inf, xmax = -0.5, 
           ymin = group_ranges$y_low, ymax = group_ranges$y_high,
           fill = c("#e6f2ff", "#f2ffe6"), alpha = 0.3) +
  # 添加分组文字标签
  annotate("text", x = -1, 
           y = (group_ranges$y_low + group_ranges$y_high)/2,
           label = group_ranges$group, fontface = "bold") +
  # 调整X轴范围,给标签留出空间
  xlim(-2, max(dataset$diff + 1) + 1) +
  labs(fill = "exdose")

两种方法都能实现:

  • Y轴subject按group分组排列,同一组内按subject编号排序
  • 左侧显示清晰的分组标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:15:30