如何在分组箱线图中添加事后检验形式的p值括号?
问题解决:ggplot添加p值时提示找不到'crown.layer'
错误原因
- 数据源不匹配:你用聚合后的
grouped_data绘制箱线图,但stat_pvalue_manual默认继承该数据集,而检验结果stat.test基于原始数据rel_data的crown.layer分组,聚合数据缺失相关细节导致变量找不到。 - 箱线图逻辑错误:箱线图需要原始数据计算分位数、中位数等分布特征,用聚合后的均值数据(
mean_fruit_b)绘制箱线图不符合图表设计逻辑。
修正方案
方案1:用原始数据绘制箱线图(推荐)
直接使用原始数据rel_data绘图,确保检验结果与绘图数据完全匹配:
# 统计检验代码保持不变 stat.test <- rel_data %>% group_by(treatment) %>% t_test(rel_fruit ~ crown.layer) %>% adjust_pvalue(method = "bonferroni") %>% add_significance("p.adj")%>% add_xy_position(x = "treatment", dodge = 0.8) stat.test2 <- rel_data %>% t_test(rel_fruit ~ treatment, p.adjust.method = "bonferroni")%>% add_xy_position(x = "treatment") # 修正ggplot部分,使用原始数据rel_data ggplot(rel_data, aes(x = treatment, y = rel_fruit, fill = crown.layer)) + geom_boxplot() + geom_jitter() + labs(x = "treatment", y = "mean fruit to closed bud ratio [%]", title = "Fruit Development") + theme_light() + stat_pvalue_manual(stat.test, label = "p", tip.length = 0) + stat_pvalue_manual(stat.test2, label = "p", tip.length = 0.02, step.increase = 0.05) + scale_y_continuous(expand = expansion(mult = c(0.05, 0.1))) + scale_fill_manual(values = c("lower"="#b0e0e6","middle"="lightpink","upper"="lightgoldenrod1"))
方案2:若需用聚合数据绘图(如展示均值+误差棒)
如果确实需要展示聚合后的统计量,将箱线图替换为合适的图表(如柱状图+误差棒),同时强制stat_pvalue_manual使用检验结果的数据集:
# 假设grouped_data包含treatment、crown.layer、mean_fruit_b、sd(标准差)列 ggplot(grouped_data, aes(x = treatment, y = mean_fruit_b, fill = crown.layer)) + geom_bar(stat = "identity", position = position_dodge(0.8)) + geom_errorbar(aes(ymin = mean_fruit_b - sd, ymax = mean_fruit_b + sd), position = position_dodge(0.8), width = 0.2) + labs(x = "treatment", y = "mean fruit to closed bud ratio [%]", title = "Fruit Development") + theme_light() + # 明确指定检验结果数据集,避免继承聚合数据 stat_pvalue_manual(stat.test, data = stat.test, label = "p", tip.length = 0) + stat_pvalue_manual(stat.test2, data = stat.test2, label = "p", tip.length = 0.02, step.increase = 0.05) + scale_y_continuous(expand = expansion(mult = c(0.05, 0.1))) + scale_fill_manual(values = c("lower"="#b0e0e6","middle"="lightpink","upper"="lightgoldenrod1"))
内容的提问来源于stack exchange,提问作者Kathi M
相关产品推荐
相关产品推荐

