R:使用数据框中的列绘制多个箱形图

时间:2012-07-05 14:52:31

标签: r boxplot

我想为数据框中的每个不相关列绘制一个单独的框图。我认为我使用boxplot.matrix包中的sfsmsic走在了正确的轨道上,但它似乎与boxplot(as.matrix(plotdata)的做法相同,即在具有共享比例的共享箱图中绘制所有内容轴。我想(比方说)5个单独的地块。

我可以手工完成这个:

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

但是必须有一种方法来使用数据框列?

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

3 个答案:

答案 0 :(得分:16)

您可以使用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")

答案 1 :(得分:8)

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

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

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

如果你真的想要单独的面板,每个面板都有一个盒子图(虽然,坦率地说,我不明白你为什么要这样做),我会改为 ggplot 并且面对:< / p>

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

答案 2 :(得分:3)

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

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

}