有没有办法将 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 上方的“代码”按钮展开代码)
我正在创建数字来显示几个警告信号相对于他们警告的事件的功效。该图基于一个数据框,该数据框由多次运行模型并整理结果的函数生成,如下所示:
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 上方的“代码”按钮展开代码)