自动保存多页格子图
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]
建立索引的最佳方式将取决于您的实际数据。
我想知道是否有人可以协助编写以下代码。我有一个巨大的数据集(> 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]
建立索引的最佳方式将取决于您的实际数据。