有没有办法将 HSD.test 的结果从 agricolae 直接导入到 ggplot2 中的 geom_text()?

Is there a way to import the results of HSD.test from agricolae directly into geom_text() in a ggplot2?

我正在创建数字来显示几个警告信号相对于他们警告的事件的功效。该图基于一个数据框,该数据框由多次运行模型并整理结果的函数生成,如下所示:

     t  type           label     early
4  847 alarm         alarm 1        41
2  849 alarm         alarm.2        39
6  853 alarm         alarm.3        35
5  923 alarm         alarm.4       -35
7 1003 alarm         alarm.5      -115

但是有十几个警报和每个警报的值 n 次(通常为 20 - 100),每个值都略有不同,具体取决于模型中内置的随机变量。

我将结果放入 lm

a.lm <- lm(log(early + 500) ~ label, data = alarm.data)

并且在检查满足假设后,运行 一种单向方差分析

anova(a.lm)

然后是 tukey post 临时测试

HSD.test(a.lm, trt = "label", console = TRUE)

产生

                log(early + 500) groups
alarm.1                     6.031453      a
alarm.2                     6.015221      a
alarm.3                     6.008366      b
alarm.4                     5.995150      b
alarm.5                     5.921384      c

我有一个函数可以根据整理后的数据生成一个 ggplot2 图,然后我手动添加 +geom_text(label = c("a", "a", "b", "b", "c") 或任何合适的字母。有没有办法概括最后一步?直接从 HSD.test 的结果中调用字母。如果我将 HSD.test 的结果放入一个对象

a.test <- HSD.test(a.lm, trt = "label", console = TRUE)

我可以使用 a.test$groups 调用结果并使用 a.test$groups$groups 调用字母分组,但我对操作列表的了解还不够多以使其对我有用。虽然 ggplot 中标签的顺序是可预测的,但 HSD.test 结果中组的顺序是不可预测的,并且在模型 运行 函数的迭代之间可能会有很大差异。

如果有人有任何见解,我将不胜感激。

好吧,我刚发布问题就遇到了解决方案。

如果你把HSD.test的输出变成一个对象

a.test <- HSD.test(ram.lm, trt = "label")

然后将组列表转换为数据框

a.df <- as.data.frame(a.test$groups)

行索引是报警名称而不是编号

a.df

                log(early + 500) groups
alarm.1                      6.849082      a
alarm.2                      6.842465      a
alarm.3                      6.837438      a
alarm.4                      6.836437      a
alarm.5                      6.812714      a

所以它们可以在函数geom_text中被具体调用

a.plot +
geom_text(label = c(a.df["alarm.1",2],
                      a.df["alarm.2",2],
                      a.df["alarm.3", 2], 
                      a.df["alarm.4", 2], 
                      a.df["alarm.5", 2])

即使没有使用相同的函数来获得紧凑的字母显示,我认为 this 可能是一种更有效的方法? (确保通过 ggplots 上方的“代码”按钮展开代码)