R语言ggplot绘制分面箱线图时geom_signif出现未知美学参数警告
警告触发原因
geom_signif的参数分为两类:需要从传入数据中映射变量的参数(xmin、xmax)需放在aes()内部,而annotations、y_position、map_signif_level属于图层全局配置参数,不能放入aes(),否则会被识别为未知美学映射,导致配置不生效同时触发警告。
p值过高说明
你提供的测试数据中,多数Soll分组下仅包含1-2个Entfernung分组的观测值,样本量不足导致统计检验无法得到显著性结果,替换为全量真实数据后该问题会自然解决。
修正后可运行代码
library(tidyverse) library(ggsignif) library(ggpubr) # 生成标注数据,可自定义显著性星号规则 anno_df <- compare_means(DGUnkraut ~ Entfernung, group.by = "Soll", data = veg_un, p.adjust.method = "holm") %>% mutate( # 可自定义不同分面的标记高度,避免重叠 y_pos = 6, # 生成显著性标记,也可直接使用p.adj显示数值 sig_label = case_when( p.adj < 0.001 ~ "***", p.adj < 0.01 ~ "**", p.adj < 0.05 ~ "*", TRUE ~ "ns" ) ) ggplot(veg_un, aes(x=Entfernung, y=DGUnkraut)) + geom_boxplot(position=position_dodge()) + geom_point(aes(color=Entfernung), position=position_jitterdodge(jitter.width = 0.2)) + facet_wrap(~Soll) + theme_minimal() + ggsignif::geom_signif( inherit.aes = FALSE, data = anno_df, # 仅映射变量放入aes aes(xmin = group1, xmax = group2), # 全局参数放在aes外 annotations = anno_df$sig_label, y_position = anno_df$y_pos, manual = TRUE )
额外优化建议
- 如果需要显示p值而非显著性星号,将
annotations参数取值替换为format.pval(anno_df$p.adj, digits = 2)即可 - 若只想在有显著性的分面显示标记,可在生成
anno_df时过滤掉p.adj > 0.05的行
内容的提问来源于stack exchange,提问作者Effigy
相关产品推荐
相关产品推荐

