我想为数据框中的每个不相关列绘制一个单独的框图.我认为我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)
Run Code Online (Sandbox Code Playgroud)
但必须有一种方法来使用数据框列?
编辑:我使用迭代,看到我的答案.
Jas*_*se_ 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)
Run Code Online (Sandbox Code Playgroud)
甚至然后使用ggplot2
包来使事情变得更好
library(ggplot2)
p <- ggplot(meltData, aes(factor(variable), value))
p + geom_boxplot() + facet_wrap(~variable, scale="free")
Run Code Online (Sandbox Code Playgroud)
从?boxplot
我们看到我们可以选择将多个数据向量作为列表的元素传递,并且我们将获得多个箱图,一个用于列表中的每个向量.
所以我们需要做的就是将矩阵的列转换为列表:
m <- matrix(1:25,5,5)
boxplot(x = as.list(as.data.frame(m)))
Run Code Online (Sandbox Code Playgroud)
如果你真的想要单独的面板,每个面板都有一个盒子图(虽然,坦率地说,我不明白你为什么要这样做),我会转向ggplot和faceting:
m1 <- melt(as.data.frame(m))
library(ggplot2)
ggplot(m1,aes(x = variable,y = value)) + facet_wrap(~variable) + geom_boxplot()
Run Code Online (Sandbox Code Playgroud)
我使用迭代来做到这一点。我想也许我在最初的问题中不清楚。仍然感谢您的答复。
par(mfrow=c(2,5))
for (i in 1:length(plotdata)) {
boxplot(plotdata[,i], main=names(plotdata[i]), type="l")
}
Run Code Online (Sandbox Code Playgroud)