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

如何用R语言agricolae包结合给定数据绘制含Tukey/LSD/Duncan分组标记的图表?

使用R语言agricolae包生成带多检验分组字母的图表

1. 准备数据(示例/替换为你的实际数据)

这里用模拟的农业试验数据演示,你可以直接替换为自己的数据集:

set.seed(123)
# 构造示例:5种处理,每种处理5个重复的产量数据
data <- data.frame(
  Treatment = rep(c("T1", "T2", "T3", "T4", "T5"), each = 5),
  Yield = c(rnorm(5, 22, 1.5), rnorm(5, 28, 1.5), rnorm(5, 25, 1.5), rnorm(5, 20, 1.5), rnorm(5, 30, 1.5))
)

2. 单因素方差分析

先验证处理间差异是否显著,这是多重比较的前提:

anova_model <- aov(Yield ~ Treatment, data = data)
summary(anova_model)

3. 执行三种多重比较检验

使用agricolae包完成LSD、Duncan、Tukey检验:

library(agricolae)

# LSD检验
lsd_result <- LSD.test(anova_model, "Treatment", p.adj = "none")
# Duncan检验
duncan_result <- duncan.test(anova_model, "Treatment", p.adj = "none")
# Tukey HSD检验
tukey_result <- HSD.test(anova_model, "Treatment", p.adj = "none")

4. 合并检验结果与均值统计

提取三种检验的分组字母,和均值、标准差合并成绘图用数据集:

library(dplyr)

# 提取各检验的分组字母
lsd_groups <- lsd_result$groups %>% 
  rownames_to_column("Treatment") %>% 
  select(Treatment, LSD = groups)
duncan_groups <- duncan_result$groups %>% 
  rownames_to_column("Treatment") %>% 
  select(Treatment, Duncan = groups)
tukey_groups <- tukey_result$groups %>% 
  rownames_to_column("Treatment") %>% 
  select(Treatment, Tukey = groups)

# 计算均值、标准差并合并分组信息
plot_data <- aggregate(Yield ~ Treatment, data, mean) %>% 
  rename(Mean_Yield = Yield) %>% 
  left_join(aggregate(Yield ~ Treatment, data, sd) %>% rename(Std_Yield = Yield), by = "Treatment") %>% 
  left_join(lsd_groups, by = "Treatment") %>% 
  left_join(duncan_groups, by = "Treatment") %>% 
  left_join(tukey_groups, by = "Treatment")

5. 绘制带分组字母的图表

结合ggplot2绘制柱状图,添加三种检验的分组字母:

library(ggplot2)

ggplot(plot_data, aes(x = Treatment, y = Mean_Yield)) +
  geom_col(fill = "#2563eb", alpha = 0.8) +
  # 添加误差棒
  geom_errorbar(aes(ymin = Mean_Yield - Std_Yield, ymax = Mean_Yield + Std_Yield),
                width = 0.2, color = "black") +
  # 依次添加三种检验的分组字母(可根据数据调整y轴偏移量)
  geom_text(aes(label = Tukey), y = Mean_Yield + Std_Yield + 0.4, size = 4, fontface = "bold") +
  geom_text(aes(label = LSD), y = Mean_Yield + Std_Yield + 0.9, size = 4, fontface = "bold", color = "#dc2626") +
  geom_text(aes(label = Duncan), y = Mean_Yield + Std_Yield + 1.4, size = 4, fontface = "bold", color = "#059669") +
  labs(title = "不同处理的作物产量对比",
       x = "处理类型",
       y = "平均产量",
       caption = "分组字母:黑色=Tukey 红色=LSD 绿色=Duncan") +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
        axis.title = element_text(size = 12),
        axis.text = element_text(size = 10))

注意事项

  • 若你的实际数据格式不同,只需调整data数据框的结构即可。
  • 若方差分析结果不显著,无需进行后续多重比较。
  • 分组字母的y轴偏移量可根据数据的数值范围灵活调整,避免重叠。

内容的提问来源于stack exchange,提问作者Loop Vinyl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:57:07