2012-11-19 39 views
1

我试图通过因素并排绘制箱形图时遇到问题。我读过几个例子,但由于某些原因,我的地块显示不正确。我认为它试图为每个值绘制箱形图,即使我将其指定为一个因子。Boxplot因素问题

我用下面的代码:

samp.norm = rnorm(1000,0,1) 
samp.exp = rexp(1000,1) 
samp.unif = runif(1000) 
samp = c(samp.norm,samp.exp,samp.unif) 
dist = c(rep("norm",1000), rep("exp",1000), rep("unif",1000)) 
DATA = as.data.frame(cbind(samp,dist)) 
DATA$dist= as.factor(DATA$dist) 
p = ggplot(DATA, aes(x=factor(DATA$dist), y = DATA$samp)) + geom_boxplot() 
p 

回答

3

的问题是你的cbind()使用胁迫所产生的对象,这样数据$ SAMP是一个因素,而不是数字。由cbind产生的列需要具有相同的类,这意味着它们在本例中是“字符”的最低常见demoninator类。这正是发明要解决的数据帧。

尝试

DATA=data.frame(samp,dist) 

,而不是你有更复杂的线条,这一切应该工作。

顺便说一句,你还应该有更简单的

p=ggplot(DATA, aes(x=dist, y = samp)) + geom_boxplot() 

,而不是你的倒数第二行。一旦你指定了ggplot(),你正在使用DATA,你不需要告诉它在哪里找到dist和samp,即不需要DATA $ dist,只需dist。另外,因为dist已经是一个因素,所以您不需要指定因子(dist)。

+0

谢谢!现在有道理。我一定在一路上遇到了一些糟糕的R编程习惯。 – Jonathan

0

+1 to @PeterEllis。需要注意的是,你还可以得到比他的建议,甚至简单的搭配:

boxplot(samp~dist) 

enter image description here