如何在ggplot中添加不属于任何尺度的手动p值显著性图例?
问题:为stat_pvalue_manual的显著性标注添加独立图例
需求:通过ggpubr::stat_pvalue_manual添加的显著性标注未绑定任何美学映射,希望为其添加类似目标图的图例,是否可通过guides或其他ggplot函数实现?
模拟代码:
library(ggplot2) library(ggpubr) library(dplyr) stat.df <- data.frame(group1 = c("setosa", "setosa"), group2 = c("versicolor", "virginica"), significance = c("ns", "*"), y.position = c(8,8.3)) iris %>% ggplot(aes(Species, Sepal.Length)) + geom_boxplot() + ggpubr::stat_pvalue_manual(stat.df, label = "significance") + theme_classic()
解决方案
由于stat_pvalue_manual默认的标注未绑定美学映射,无法直接通过guides生成图例,需要手动将标注与美学映射绑定,再自定义图例样式。以下是两种可行方法:
方法1:绑定美学映射生成基础图例
通过将显著性标签绑定到颜色美学,配合scale_color_manual定义图例,同时强制标注颜色保持一致:
iris %>% ggplot(aes(Species, Sepal.Length)) + geom_boxplot() + ggpubr::stat_pvalue_manual(stat.df, label = "significance", aes(color = significance), # 将标签绑定到颜色美学 show.legend = TRUE) + # 开启图例显示 scale_color_manual(name = "显著性", # 设置图例标题 values = c("ns" = "black", "*" = "black")) + # 标注颜色统一为黑色 theme_classic()
方法2:自定义图例外观(贴合标注样式)
如果希望图例直接显示显著性文本而非默认的点标记,可通过guides覆盖图例的美学设置:
iris %>% ggplot(aes(Species, Sepal.Length)) + geom_boxplot() + ggpubr::stat_pvalue_manual(stat.df, label = "significance", aes(color = significance), show.legend = TRUE) + scale_color_manual(name = "显著性", values = c("ns" = "black", "*" = "black")) + guides(color = guide_legend(override.aes = list(label = c("ns", "*"), # 图例用文本代替点标记 shape = NA))) + # 隐藏默认点标记 theme_classic() + theme(legend.key = element_blank()) # 去掉图例背景框
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

