自动保存多页格子图

时间:2016-01-05 11:27:11

标签: r graph plot lattice

我想知道是否有人可以协助下面的代码。我有一个巨大的数据集(> 1000个主题),我试图单独进行可视化。

我很幸运能找到Tony Cookson撰写的R-bloggers代码,我已经修改了该代码供我使用。代码工作正常但生成的pdfs已损坏 - 基本上它们拒绝打开。我有一种感觉到某处有虫子,但我还没知道在哪里。任何帮助将受到高度赞赏。

library(lattice)

names = LETTERS[1:3] 

for(i in 1:3){

mypath <- file.path("myFilepath", "folder containing 'Plots' subfolder ",
                    "Plots",paste("myplot_", names[i], ".pdf", sep = ""))

pdf(file=mypath)
mytitle = paste("Theoph Plots", names[i])
xyplot(conc ~ Time | Subject, group = Subject, data = Theoph, type = "l",
     layout = c(2, 2), main = mytitle)
dev.off()
}

要使代码具有可重现性,您需要替换myFilepath,包含&#39; Plots&#39;子文件夹和&#34; Plots&#34;包含可在您的计算机上找到的实际文件夹的名称。有关详细信息,请参阅R-bloggers上的原文。我很乐意澄清任何看似含糊不清的内容。

由于

编辑:

library(lattice)

names = LETTERS[1:3] 

for(i in 1:3){

mypath <- file.path("myFilepath", "folder containing 'Plots' subfolder ",
                "Plots",paste("myplot_", names[i], ".pdf", sep = ""))

pdf(file=mypath)
mytitle = paste("Theoph Plots", names[i])
print(xyplot(conc ~ Time | Subject, group = Subject, data = Theoph, type =    "l",
 layout = c(2, 2), main = mytitle))
dev.off()
}

我设法使用打印功能找到了一个临时解决方案(上图)。但是,我目前正在以相同的pdf获得所有12个主题。我真正想要的是4个主题(2乘2矩阵)在单独的pdfs上,所以总共3个pdf。有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

如果您希望在每个页面上绘制Subject的子集,那么您必须为每次迭代对数据进行子集化,然后进行绘图。

要在每个页面上获取4个主题,您可以使用以下索引构建器作为子集的基础:

(i - 1) * 4 + 1:4

Theoph数据集的技巧是主题&#34;数字&#34;实际上是有序因素。因此,您必须将上述内容转换为一个因子,或者作为快捷方式转换为字符向量。

for(i in 1:3){
    ## Changed mypath to make it reproducible
    mypath <- file.path(tempdir(), paste("myplot_", names[i], ".pdf", sep = ""))
    pdf(file=mypath)

    mytitle = paste("Theoph Plots", names[i])

    myIndex <- as.character((i - 1) * 4 + 1:4) # index builder from above

    print(xyplot(conc ~ Time | Subject, 
        data = Theoph[Theoph$Subject %in% myIndex, ],
        type = "l", layout = c(2, 2), main = mytitle))
    dev.off()
}

受试者的顺序有点棘手,因为该变量是有序因子,如上所述。为了保持排序,您可以对该因子的级别进行分组:

myIndex <- levels(Theoph$Subject)[(i - 1) * 4 + 1:4]

构建索引的最佳方式取决于您的实际数据。