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

如何在R中为分组旋转X轴标签添加带标注的括号?

在R中实现Wego风格的分组X轴标签括号标注

核心思路

要实现这种效果,关键是先提取X轴每个标签的坐标位置,再根据分组绘制括号线段和标注文本。以下是基于ggplot2的完整实现方案:

步骤1:准备示例数据

先构造带分组的测试数据,模拟实际场景:

library(ggplot2)
library(dplyr)

set.seed(123)
df <- tibble(
  gene = paste0("Gene_", 1:15),
  group = rep(c("Group A", "Group B", "Group C"), each = 5),
  expression = rnorm(15, mean = 5, sd = 1)
)

步骤2:绘制基础图形并提取坐标

先画出带旋转X轴标签的基础图,再通过ggplot_build()提取X轴标签的位置信息:

# 基础绘图
p <- ggplot(df, aes(x = gene, y = expression)) +
  geom_col(fill = "#2E8B57") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# 提取X轴标签的中心坐标
pb <- ggplot_build(p)
x_coords <- pb$layout$panel_params[[1]]$x$get_labels() %>% 
  as.numeric()

步骤3:定义分组范围并绘制括号与标注

根据分组确定每个组的X轴起止坐标,再用annotate()添加括号线段和分组文本:

# 定义每个分组的X轴范围与括号位置
group_ranges <- tibble(
  group_name = c("Group A", "Group B", "Group C"),
  x_start = c(min(x_coords[1:5]), min(x_coords[6:10]), min(x_coords[11:15])),
  x_end = c(max(x_coords[1:5]), max(x_coords[6:10]), max(x_coords[11:15])),
  y_pos = rep(-0.8, 3)  # 括号的Y轴位置,可按需调整
)

# 组装最终图形
p_final <- p +
  # 绘制括号的三条线段
  annotate("segment", x = group_ranges$x_start, xend = group_ranges$x_end,
           y = group_ranges$y_pos, yend = group_ranges$y_pos, size = 1) +
  annotate("segment", x = group_ranges$x_start, xend = group_ranges$x_start,
           y = group_ranges$y_pos, yend = group_ranges$y_pos + 0.3, size = 1) +
  annotate("segment", x = group_ranges$x_end, xend = group_ranges$x_end,
           y = group_ranges$y_pos, yend = group_ranges$y_pos + 0.3, size = 1) +
  # 添加分组标注文本
  annotate("text", x = (group_ranges$x_start + group_ranges$x_end)/2,
           y = group_ranges$y_pos - 0.3, label = group_ranges$group_name,
           size = 4, fontface = "bold") +
  # 调整Y轴范围,避免括号被截断
  ylim(min(df$expression) - 1.5, max(df$expression) + 0.5)

print(p_final)

关键说明

  • 若分组的标签数量不均匀,只需调整group_ranges中的x_start和x_end,对应每个组X标签坐标的最小/最大值即可。
  • y_pos及Y轴范围可根据图形高度灵活调整,确保括号和标注完全显示。
  • 若使用基础绘图系统,可通过par("usr")获取坐标轴范围,结合axis(1)的标签位置计算坐标,逻辑类似。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:22:44