我想在同一个boxplot图中添加一个来自不同数据帧的附加箱图。我有一个第一个数据帧,其中一个连续变量按5个级别的因子变量分组。我用这段代码创建了一个盒子图
boxplot (mydata$height~ mydata$group, xlab="", ylab="", ylim=c(120, 260), col= c("chartreuse1", "gray87", "gray87", "gray87", "gray87"), las=1)
现在我需要在同一个图表中添加另一个表示正常范围的data.frame的boxplot。我首先尝试添加此代码:
boxplot (control$height, add=TRUE)
来自第一个数据帧的变量的数据是:
Height group
1 160.5401 IC
2 152.1736 IC
6 135.2394 IC
7 138.8716 IC
8 150.3041 IC
9 163.8295 IC
10 141.1793 IC
11 152.1263 IC
12 175.3540 IC
13 133.9237 IP
14 131.2115 IP
15 134.8984 IP
16 134.2888 IP
17 132.0721 IP
18 131.6538 IP
19 134.0276 IP
20 140.5256 IP
21 135.6092 IP
24 141.6863 IP
25 165.4456 TC
26 238.7608 TC
27 162.2336 TC
28 197.7274 TC
29 163.0832 TC
然而,控制箱图被添加到第一组之上,这是一团糟......
任何帮助将不胜感激。
由于
答案 0 :(得分:1)
最简单的可能是使用at
参数,即使它确实至少有一个次要的"故障":
## using your "mydata"
boxplot(Height ~ group, data=mydata,
xlim=c(0.5, 1.5 + length(unique(mydata$group))))
boxplot(mydata$Height, at=1 + length(unique(mydata$group)), add=TRUE)
(在发现超过3个级别的情况下,我概括了xlim
。)
问题是第四个框图与其他框图的宽度不同。你可以在任一调用中使用boxwex
来补偿这一点(不幸的是,boxwex
使用相同的值不会给出相同的宽度)。
<强> 修改 强>:
boxplot
将x轴范围从1设置为箱图的数量,由公式语法中的~ group
定义。它需要这个范围并在每个方向上延伸0.5。在你的3组示例中,它通常跨越0.5到3.5,演示如下:
par('usr')
## [1] 0.38 3.62 9.46 34.84
显示x的范围为0.38至3.62(并且y为9.46至34.84)。 (默认情况下, R 在两个方向上将两个轴扩展4%,因此0.5 - 0.4*(3.5-0.5)
和3.5 + 0.4*(3.5-0.5)
(或更简洁c(0.5, 3.5) + c(-1, 1)*0.04*(3.5-0.5)
)。(请参阅{{ 1}}并查找?par
作为参考。)
由于您要为此添加一个箱图,我们必须强制xaxs
比通常需要的更宽。我可以使用硬编码boxplot
,但我不想输入&#34;魔术常数&#34;,所以我根据数据推广它。
xlim=c(0, 4.5)
提供了组数; 我们不需要在第二次调用中设置它,因为length(unique(mydata$group))
仅在boxplot
(默认值)时设置轴并且它正在创建新帧。