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

如何在R的ggplot中为分组条形图添加水平标题/标签

ggplot绘制带分组标签水平线的分组条形图模板

以下是符合需求的绘图模板,可实现“每组3个条形+带标签分组水平线”的效果:

步骤1:准备数据与加载依赖包

首先加载tidyverse包(包含ggplot2和数据处理工具),并构造符合结构的示例数据:

library(tidyverse)

# 固定随机种子确保结果可复现
set.seed(123)

# 构造示例数据:3个分组,每组3个条形
df <- tibble(
  # 每组内的3个条形类别
  sub_category = rep(c("指标1", "指标2", "指标3"), 3),
  # 分组名称:对照组、处理组1、处理组2
  group = rep(c("对照组", "处理组1", "处理组2"), each = 3),
  # 随机生成条形高度数值
  value = sample(15:40, 9, replace = TRUE)
) %>%
  # 给每个条形分配连续的x轴位置,用于后续定位分组边界
  mutate(x_pos = row_number())

步骤2:绘制图形

核心是用geom_col画条形,geom_segment绘制分组水平线,geom_text添加分组标签:

ggplot(df, aes(x = x_pos, y = value)) +
  # 绘制分组条形,按子类别区分填充色
  geom_col(aes(fill = sub_category), width = 0.8) +
  # 添加分组水平线:计算每个分组的左右边界,y轴位置略高于所有条形的最大值
  geom_segment(
    data = df %>% 
      group_by(group) %>% 
      summarise(
        x_start = min(x_pos) - 0.4,  # 条形左边界外扩0.4,让线更贴合分组
        x_end = max(x_pos) + 0.4,
        y_line = max(df$value) + 3   # 水平线高度比最大值高3,避免遮挡条形
      ),
    aes(x = x_start, xend = x_end, y = y_line, yend = y_line),
    color = "#333333", linewidth = 0.8
  ) +
  # 添加分组标签:位于水平线中间位置,高度比线略高
  geom_text(
    data = df %>% 
      group_by(group) %>% 
      summarise(
        x_mid = mean(x_pos),
        y_label = max(df$value) + 4.5
      ),
    aes(x = x_mid, y = y_label, label = group),
    size = 4.5, fontface = "bold", color = "#222222"
  ) +
  # 替换x轴刻度为子类别名称
  scale_x_continuous(breaks = df$x_pos, labels = df$sub_category) +
  # 自定义主题与标签
  theme_minimal() +
  theme(
    axis.title.x = element_text(size = 13, margin = margin(t = 10)),
    axis.title.y = element_text(size = 13, margin = margin(r = 10)),
    legend.title = element_text(size = 12),
    plot.margin = margin(20, 20, 20, 20, "pt")  # 调整边距防止标签被截断
  ) +
  labs(
    x = "子类别",
    y = "测量值",
    fill = "子类别"
  )

自定义调整说明

  • 如果需要增加/减少分组数量:只需修改rep(c("对照组", "处理组1", ...), each = 3)中的分组名称列表即可
  • 调整水平线高度:修改y_line = max(df$value) + 3中的数值
  • 更改条形宽度:调整geom_col中的width参数
  • 替换颜色:修改geom_segment的color、geom_text的color或geom_col的fill映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:20:31