添加平均值时的框图错误

时间:2017-05-22 09:17:24

标签: r mean boxplot tapply

我发现之前已经问过这个问题,并且有人建议使用ggplot,lattice等。我的问题是根据分类变量将平均值添加到boxplot上。

这是我的代码,但不起作用:

步骤1:根据孕产妇肥胖组,我使用tapply创建了一个载体,以获得4岁时bmi z分数的平均值:

means <- tapply(therapy$zbmi_4,therapy$Gruppe,mean,na.rm=TRUE) # calculate means

输出如下:

>means
Normal-weight         Obese 
-0.03207792        0.60130081

步骤2:根据孕产妇肥胖组,我在4岁时创建了一个简单的bmi z分数盒子图:

plot(therapy$Gruppe,therapy$zbmi_4,
xlab = 'Maternal BMI groups',
ylab = 'Offspring BMI z-scores at 4 years',
cex.lab=1.5, cex.axis=1.4, cex.main=1.6, cex.sub=1.5,
col=c("white","grey"), main="Effect of maternal obesity",
pch=16,cex=1)
points(x=therapy$Gruppe,y=means,pch=19, col="red") # add means
legend("topleft", legend=c("P-value <0.0001"), bty = "n", cex=1.5)

The output looks like this (without points) <code>x=therapy$Gruppe,y=means,pch=19, col="red")</code>

错误消息是:

>points(x=therapy$Gruppe,y=means,pch=19, col="red", type="l") # add means
Error in xy.coords(x, y) : 'x' and 'y' lengths differ

我完全理解这个问题。因为,有949个观察结果,只有2个手段。

> length(therapy$Gruppe)
[1] 949
> length(means)
[1] 2

现在,我是否想得太多,或者是否有一种非常简单的方法可以根据母体肥胖组(正常体重与肥胖)在每个方框图中添加“点”以获得平均bmi z评分。我非常感谢任何帮助和建议。

非常感谢你提前

1 个答案:

答案 0 :(得分:0)

x = 1:length(means)中使用points()(根据您的小组数量)。以下是iris的示例,因为您没有提供数据。

data(iris)

means <- tapply(iris$Sepal.Length, iris$Species, mean)

plot(iris$Species, iris$Sepal.Length)
points(x = 1:length(means), y = means, pch = 10)

enter image description here