我想为数据框中的每个不相关列绘制一个单独的框图。我认为我使用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)
但是必须有一种方法来使用数据框列?
编辑:我使用迭代,看到我的答案。
答案 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")
}