2012-07-05 146 views
7

我想绘制数据框中每个不相关列的INDIVIDUAL箱图。我以为自己在boxplot.matrixboxplot.matrix的正确轨道上,但它似乎与boxplot(as.matrix(plotdata)一样,它将所有内容都绘制在共享轴上的共享比例图中。我想(说)5个人的情节。R:使用数据帧中的列绘制多个箱图

我可以像手这样做:

par(mfrow=c(2,2)) 
boxplot(data$var1 
boxplot(data$var2) 
boxplot(data$var3) 
boxplot(data$var4) 

但一定要使用数据框架柱的方法吗?

编辑:我用迭代,看到我的答案。

回答

2

我用迭代来做到这一点。我想也许我原来的问题并不清楚。谢谢你的回应。

par(mfrow=c(2,5)) 
for (i in 1:length(plotdata)) { 
     boxplot(plotdata[,i], main=names(plotdata[i]), type="l") 

} 
7

?boxplot我们看到我们可以选择将多个数据向量作为列表元素传递,我们将获得多个箱形图,其中每个箱形图对应于我们列表中的每个矢量。

所以我们需要做的是我们的矩阵的列转换为一个列表:

m <- matrix(1:25,5,5) 
boxplot(x = as.list(as.data.frame(m))) 

如果你真的想每个单独的面板用单箱线图(虽然,坦白地说,我不明白为什么你想这样做),我会转而用ggplot和刻面:

m1 <- melt(as.data.frame(m)) 
library(ggplot2) 
ggplot(m1,aes(x = variable,y = value)) + facet_wrap(~variable) + geom_boxplot() 
+2

-1通过阅读文档作弊! ;-) – 2012-07-05 14:57:58

+0

使用它仍会返回一个包含多个x类别的单个图。我试图为矩阵中找到的每个x类别制作单独的图。 (x = as.list(as.data.frame(plotdata)))'是我使用的代码,其中plotdata是一个... x9双重矩阵。 – gisol 2012-07-05 15:12:40

+0

@gisol看我的编辑。 – joran 2012-07-05 15:19:08

10

您可以使用reshape包来简化事情

data <- data.frame(v1=rnorm(100),v2=rnorm(100),v3=rnorm(100), v4=rnorm(100)) 
library(reshape) 
meltData <- melt(data) 
boxplot(data=meltData, value~variable) 

甚至然后用ggplot2包让事情更好

library(ggplot2) 
p <- ggplot(meltData, aes(factor(variable), value)) 
p + geom_boxplot() + facet_wrap(~variable, scale="free") 
+0

'melt'和'stack'有什么区别? – 2017-07-07 16:13:39