有没有办法将 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 传递给活动
有没有办法使用 Google 应用程序脚本从 Bigquery 结果生成 Microsoft Excel?