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

