我做了一个循环来创建多个箱图。问题是,我想保存所有的箱图,而不是互相覆盖。有什么建议吗?
这是我目前的代码:
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")
}
答案 0 :(得分:6)
您想将它们保存在某些文件中,还是保存它们以便能够在不同的窗口中查看它们?
如果是第一种情况,您可以在png
循环中使用pdf
,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> }
答案 1 :(得分:6)
只是要添加@juba的答案,如果要将图表保存到多页pdf文件中,则不必使用@juba建议的paste
命令。此
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文档,其中每个页面都是一个boxplot。如果要将箱图存储在单独的pdf文档中,请使用file=paste
命令。
答案 2 :(得分: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")
}
之前,您的代码在后续迭代期间覆盖了之前的boxplot信息。