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

Posted

技术标签:

【中文标题】有没有办法将 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? 【发布时间】:2021-09-29 14:45:59 【问题描述】:

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

     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 hoc 测试

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 结果中的组顺序不可预测,并且在模型运行函数的迭代之间可能会有很大差异。

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

【问题讨论】:

【参考方案1】:

好吧,在我发布问题后,我实际上遇到了一个解决方案。

如果你把 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])

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于有没有办法将 HSD.test 的结果从 agricolae 直接导入到 ggplot2 中的 geom_text() 中?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将 localstorage:getItem() 的结果从 webview 传递给活动

usaco题目分享——Agri-Net

有没有办法使用 Google 应用程序脚本从 Bigquery 结果生成 Microsoft Excel?

有没有办法使用 Python 将 bigquery 返回的结果转换为 Json 格式?

POJ 1258 Agri-Net(Prim)

Agri-Net ——最小生成树模板题(矩阵输入)