我想在相同的方框图中添加一个来自不同数据帧的附加框图。我有第一个数据,它有一个连续变量,由一个5级的因子变量组成。我用下面的代码创建一个方格图
boxplot (mydata$height~ mydata$group, xlab="", ylab="", ylim=c(120, 260), col= c("chartreuse1", "gray87", "gray87", "gray87", "gray87"), las=1)
现在,我需要在相同的图中添加另一个表示data.frame范围的normality.My的盒子图,第一次尝试添加以下代码:
boxplot (control$height, add=TRUE)
第一个数据帧的vars数据如下:
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
然而,控制盒被添加到第一个组的上方,它是一个混乱的.
任何帮助都将不胜感激。
谢谢
发布于 2015-05-28 16:15:45
最简单的可能是使用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。在您的三个组的示例中,它通常从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)
)。(请参阅?par
,查找xaxs
以获得参考。)
由于您想要再添加一个框图,我们必须强制boxplot
比通常需要的更宽。我可以使用硬编码的xlim=c(0, 4.5)
,但我不喜欢输入“魔术常量”,所以我根据数据对其进行了概括。
length(unique(mydata$group))
提供组数;我们不需要在第二个调用中设置它,因为boxplot
只在add=FALSE
(默认)并且正在创建一个新框架时设置轴。
https://stackoverflow.com/questions/30511584
复制相似问题