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

geom_bracket(ggpubr): 如何添加带斜体p值和显著性星号的标注

解决方案

问题出在parse=TRUE模式下,*会被解析为数学表达式的乘号,而非文本星号。要实现斜体p值加末尾显著性星号的格式,需要将星号作为文本元素嵌入数学表达式中,以下是两种可行方法:

方法1:使用bquote动态生成表达式

bquote可以将变量值插入表达式,同时通过~ '*'将星号标记为文本:

# 假设从模型中得到的p值
p_val <- 0.02

# 构造带斜体p和星号的标签
label <- bquote(italic(p) < .(p_val) ~ '*')

# 绘图时调用geom_bracket
library(ggpubr)
ggboxplot(your_data, x = "group", y = "value") +
  geom_bracket(
    xmin = "Group1", xmax = "Group2", y.position = max(your_data$value) + 0.5,
    label = label,
    parse = TRUE  # 必须开启解析
  )

方法2:构造表达式字符串后解析

如果习惯用字符串拼接,可先构造符合plotmath语法的字符串,再用parse(text=...)转换:

p_val <- 0.02
# 拼接时用~ '*'将星号作为文本元素
label_str <- paste0("italic(p) < ", p_val, " ~ '*'")
label <- parse(text = label_str)

# 绘图代码同上
ggboxplot(your_data, x = "group", y = "value") +
  geom_bracket(
    xmin = "Group1", xmax = "Group2", y.position = max(your_data$value) + 0.5,
    label = label,
    parse = TRUE
  )

多星号扩展

如果需要根据p值添加对应数量的星号(如p<0.001***),只需调整星号部分:

# 示例:p<0.001加3个星号
label <- bquote(italic(p) < .(0.001) ~ '***')

关键说明

  • 不要直接用paste拼接^*,这会被parse解析为乘号运算,导致语法错误;
  • ~在plotmath中用于分隔不同元素,确保星号被识别为独立文本;
  • 必须保持parse=TRUE才能渲染斜体的p值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:42:49