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

如何为R语言ggplot的geom_bar柱状图对象添加显著性括号

ggplot2 geom_bar柱状图添加显著性括号实现方案

网上能搜到的显著性标记教程大多只讲裸星号标注、或者仅适配geom_boxplot箱线图,用ggsignif包调整参数即可完美实现带括号的显著性标注,效果和参考示例一致。

前置依赖安装加载

# 首次使用先安装
install.packages(c("ggplot2", "ggsignif"))
# 加载包
library(ggplot2)
library(ggsignif)

基础单组柱状图实现

geom_signif()默认适配原始数据分布的箱线图,用到柱状图时核心是手动调整括号垂直位置,避免自动计算导致的错位、遮挡柱子问题。

# 先绘制基础柱状图,以mtcars数据集不同气缸数对应平均油耗为例
base_bar <- ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
  geom_bar(stat = "summary", fun = "mean", fill = "#4e79a7", width = 0.6) +
  labs(x = "气缸数", y = "平均油耗(mpg)") +
  theme_bw()

# 添加显著性括号
base_bar + 
  geom_signif(
    # 指定要比较的分组对
    comparisons = list(c("4", "6"), c("4", "8"), c("6", "8")),
    # 手动设置每组括号的垂直高度,数值略高于对应柱子顶端即可
    y_position = c(28, 33, 30),
    # 对应每组比较的显著性标记
    annotations = c("*", "***", "ns"),
    # 括号两端短竖线的长度
    tip_length = 0.02,
    # 标记文本大小
    textsize = 5,
    # 括号线条粗细
    linewidth = 0.7
  )

如果已经提前做完统计检验(方差分析事后比较、t检验等),可以加参数manual = TRUE,直接把你算好的显著性结果传入annotations即可,不需要包自动计算统计值,避免结果和自己的分析不一致。

分组(dodge)柱状图适配

带填充分组的并排柱状图,不要用comparisons参数自动匹配位置,手动指定每个括号的左右x坐标即可精准对齐:

# 绘制分组并排柱状图,以是否为自动挡为填充分组
group_bar <- ggplot(mtcars, aes(x = factor(cyl), y = mpg, fill = factor(am))) +
  geom_bar(stat = "summary", fun = "mean", position = position_dodge(width = 0.8), width = 0.7) +
  labs(x = "气缸数", y = "平均油耗(mpg)", fill = "是否自动挡") +
  theme_bw()

# 添加显著性括号
group_bar +
  geom_signif(
    # 手动构建标注数据框,指定每个括号的起止x坐标、高度、标注文本
    data = data.frame(
      x_start = c(0.75, 1.75, 2.75),
      x_end = c(1.25, 2.25, 3.25),
      y_pos = c(29, 34, 31),
      signif_label = c("*", "***", "ns")
    ),
    aes(x = x_start, xend = x_end, y = y_pos, yend = y_pos, annotation = signif_label),
    manual = TRUE,
    tip_length = 0.02,
    textsize = 5,
    linewidth = 0.7
  )

实现效果参考

带显著性括号的柱状图效果示例


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:18:21