自动保存多页格子图

Autosaving multiple pages of lattice plots

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

我很幸运地从 R-bloggers 中找到了 Tony Cookson 编写的代码,我已经对其进行了修改以供使用。代码工作正常,但生成的 pdf 已损坏 - 基本上它们拒绝打开。我觉得某处有错误,但我还没有弄清楚在哪里。任何帮助将不胜感激。

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、包含 'Plots' 子文件夹和 "Plots" 的文件夹替换为可以在您的计算机上找到的实际文件夹的名称。有关详细信息,请参阅 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 x 2 矩阵)在单独的 pdf 上,所以总共制作 3 个 pdf。有人知道怎么做吗?

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

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

(i - 1) * 4 + 1:4

Theoph 数据集的诀窍在于,主题 "numbers" 实际上是有序因子。所以你必须将上面的转换为一个因子,或者作为一个快捷方式,转换为一个字符向量。

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]

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