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

ggplot2中stat_compare_means()字体调整问题:保留对比括号并手动改文字?

解决stat_compare_means对比括号保留+自定义字体文本的问题

使用stat_compare_means()的comparisons参数时无法修改字体是该函数的已知限制,要实现保留对比括号、手动添加指定字体文本的需求,可按以下方式操作:

步骤1:仅生成对比括号,不显示默认文本

将stat_compare_means()的label参数设为NULL,这样只会绘制分组间的对比括号,不会输出任何文本内容:

library(ggplot2)
library(ggpubr) 
library(showtext)
tooth <- subset(ToothGrowth, dose == 0.5)
font_add_google("Libre Baskerville")
showtext_auto()

p <- ggboxplot(tooth, x = "supp", y = "len")+
  theme_classic(base_size = 20, base_family = "Libre Baskerville") +
  stat_compare_means(comparisons = list(c("OJ", "VC")),
                     label = NULL) # 只绘制对比括号,不生成文本
p

步骤2:手动添加指定字体的文本

先计算两组比较的p值,再用annotate()函数手动添加文本,直接指定family参数应用目标字体,位置可根据括号位置调整:

# 计算并格式化p值
p_val <- t.test(len ~ supp, data = tooth)$p.value
p_formatted <- sprintf("p = %.3f", p_val)

# 添加自定义字体的文本到括号上方
p + annotate("text", x = 1.5, y = 25,
             label = p_formatted,
             family = "Libre Baskerville",
             size = 5)

替代方案的问题说明

你之前尝试的geom_rect()覆盖法会破坏对比括号的位置完整性,而直接让stat_compare_means()仅生成括号、再手动添加文本的方式,既保留了原有布局,又能灵活控制字体样式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:10:25