5

我做了一个循环来创建多个箱线图。问题是,我想保存所有箱线图而不互相覆盖。有什么建议么?

这是我当前的代码:

boxplot <- list()
for (x in 1:nrow(checkresults)){
    boxplots <- boxplot(PIM[,x], MYC [,x], OBX[,x], WDR[,x], EV[,x], 
                        main=colnames(PIM)[x], 
                        xlab="PIM, MYC, OBX, WDR, EV")
}
4

3 回答 3

6

你想将它们保存在一些文件中,还是保存它们以便能够在不同的窗口中查看它们?

如果是第一种情况,您可以在循环png中使用 apdf或任何函数调用:for

R> for (i in 1:5) { 
R>    png(file=paste("plot",i,".png",sep=""))
R>    plot(rnorm(10))
R>    dev.off() 
R> }

如果要在单独的窗口中显示它们,只需使用dev.new

R> for (i in 1:5) { 
R>    dev.new()
R>    plot(rnorm(10)); 
R> }
于 2011-03-14T13:10:30.350 回答
6

只是为了添加@juba 的答案,如果您想将绘图保存到多页 pdf 文件中,那么您不必使用paste@juba 建议的命令。这

pdf("myboxplots.pdf")
for (x in seq_along(boxplots)){
    boxplot(PIM[,x], MYC [,x], OBX[,x], WDR[,x],EV[,x],
                     main = colnames(PIM)[x], 
                     xlab = "PIM, MYC, OBX, WDR, EV")
}
dev.off() 

创建一个多页的 pdf 文档,其中每一页都是一个箱线图。如果要将箱线图存储在单独的 pdf 文档中,请使用该file=paste命令。

于 2011-03-14T13:22:57.983 回答
2

首先,创建一个正确长度的列表 - 它只是让事情变得更容易,并且是在通过循环填充对象之前分配存储的好习惯:

boxplots <- vector(mode = "list", length = nrow(checkresults))

boxplots然后我们可以循环遍历您想要的数据,并使用以下[[x]]符号分配给列表的每个组件:

for (x in seq_along(boxplots)){
    boxplots[[x]] <- boxplot(PIM[,x], MYC [,x], OBX[,x], WDR[,x],EV[,x],
                             main = colnames(PIM)[x], 
                             xlab = "PIM, MYC, OBX, WDR, EV")
}

之前,您的代码在后续迭代期间会覆盖先前的箱线图信息。

于 2011-03-14T13:10:14.643 回答