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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:55:01