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

