如何为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
相关产品推荐
相关产品推荐

