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

如何在分组箱线图中添加事后检验形式的p值括号?

问题解决:ggplot添加p值时提示找不到'crown.layer'

错误原因

  1. 数据源不匹配:你用聚合后的grouped_data绘制箱线图,但stat_pvalue_manual默认继承该数据集,而检验结果stat.test基于原始数据rel_data的crown.layer分组,聚合数据缺失相关细节导致变量找不到。
  2. 箱线图逻辑错误:箱线图需要原始数据计算分位数、中位数等分布特征,用聚合后的均值数据(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:11:09