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

ggplot使用geom_richtext添加混合字体显著性标注出现代码残留如何解决

现有问题修复

你遇到的图表显示多余代码的问题,是因为你贴出的调用代码末尾附带了不属于R语法的markdown图片引用标记,相当于对geom_richtext()返回的图层对象执行了非法索引,导致图层输出异常。
只需要去掉代码末尾的多余内容,将geom_richtext()作为常规图层加入ggplot的图层链即可正常显示,参考写法如下:

library(ggplot2)
library(ggtext)

# 完整调用示例
ggplot(你的数据集, aes(x = 横轴变量, y = 纵轴变量)) +
  # 你原本使用的其他图层,比如geom_boxplot、geom_point等
  geom_richtext(
    x = 1.15, 
    y = 0.2, 
    label.color = NA, # 不需要标注外框可设为NA
    fill = NA, # 不需要背景填充可设为NA
    label = "<b>显著性水平</b><br>ns <i>p</i> > 0.05<br>* <i>p</i> ≤ 0.05<br>** <i>p</i> ≤ 0.01<br>*** <i>p</i> ≤ 0.001<br>**** <i>p</i> ≤ 0.0001"
  )

替代实现方案

如果需要其他方案实现同类效果,可以选择以下两种常用路径:

方案1:原生annotation_custom结合gridtext实现富文本标注

不需要额外叠加图层,适配性更强:

library(gridtext)

# 先构建富文本对象
sig_anno <- richtext_grob(
  text = "<b>显著性水平</b><br>ns <i>p</i> > 0.05<br>* <i>p</i> ≤ 0.05<br>** <i>p</i> ≤ 0.01<br>*** <i>p</i> ≤ 0.001<br>**** <i>p</i> ≤ 0.0001",
  x = 1.15, 
  y = 0.2,
  gp = gpar(fontsize = 10),
  box_gp = gpar(col = NA, fill = NA)
)

# 加入图表
ggplot(你的数据集, aes(x = 横轴变量, y = 纵轴变量)) +
  # 原有图层
  annotation_custom(sig_anno)

方案2:使用ggsignif包自动添加组间显著性标记

如果你的核心需求是给不同组的比较结果加显著性标注,更推荐使用专门的ggsignif包,无需手动写HTML标签,可自动计算p值匹配星号规则:

library(ggsignif)

ggplot(你的数据集, aes(x = 分组变量, y = 数值变量)) +
  geom_boxplot() +
  geom_signif(
    comparisons = list(c("组A", "组B"), c("组A", "组C")), # 指定需要比较的组
    map_signif_level = TRUE, # 自动将p值转换为对应星号
    textsize = 3,
    tip_length = 0.01
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:39:03