我正在尝试在R中生成一系列按 2 个因素分组的箱形图。我设法制作了情节,但我无法让盒子按正确的方向订购。
我正在使用的数据场如下所示:
Nitrogen Species Treatment
2 G L
3 R M
4 G H
4 B L
2 B M
1 G H
我试过了:
boxplot(mydata$Nitrogen~mydata$Species*mydata$Treatment)
这按字母顺序排列了盒子(前三个是“高”处理,然后在这三个中,它们按物种名称的字母顺序排列)。
我希望箱线图的顺序为低>中>高,然后在每个组中为该物种 G>R>B。
所以我尝试在公式中使用一个因子:
f = ordered(interaction(mydata$Treatment, mydata$Species),
levels = c("L.G","L.R","L.B","M.G","M.R","M.B","H.G","H.R","H.B")
然后:
boxplot(mydata$Nitrogen~f)
然而,这些盒子仍然以相同的顺序排列。标签现在不同了,但盒子没有移动。
我已经提取了每组数据并将它们单独绘制在一起:
lg = mydata[mydata$Treatment="L" & mydata$Species="G", "Nitrogen"]
mg = mydata[mydata$Treatment="M" & mydata$Species="G", "Nitrogen"]
hg = mydata[mydata$Treatment="H" & mydata$Species="G", "Nitrogen"]
etc ..
boxplot(lg, lr, lb, mg, mr, mb, hg, hr, hb)
这给出了我想要的,但我更愿意以一种更优雅的方式做到这一点,所以我不必为更大的数据集单独拉出每一个。
可加载数据:
mydata <-
structure(list(Nitrogen = c(2L, 3L, 4L, 4L, 2L, 1L), Species = structure(c(2L,
3L, 2L, 1L, 1L, 2L), .Label = c("B", "G", "R"), class = "factor"),
Treatment = structure(c(2L, 3L, 1L, 2L, 3L, 1L), .Label = c("H",
"L", "M"), class = "factor")), .Names = c("Nitrogen", "Species",
"Treatment"), class = "data.frame", row.names = c(NA, -6L))