结合R

时间:2015-05-28 15:57:12

标签: r

我想在同一个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

然而,控制箱图被添加到第一组之上,这是一团糟......

任何帮助将不胜感激。

由于

1 个答案:

答案 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;,所以我根据数据推广它。

  1. xlim=c(0, 4.5)提供了组数;
  2. 为此添加1以考虑额外的箱图;和
  3. 在此处添加另外0.5以使其更多一点(占箱线图宽度)。
  4. 我们不需要在第二次调用中设置它,因为length(unique(mydata$group))仅在boxplot(默认值)时设置轴并且它正在创建新帧。