【发布时间】:2014-06-12 10:40:18
【问题描述】:
我编写了一个dlply 函数,用于通过两个变量SITE 和SP 进行绘图打印。对于这个例子,它打印了 715 个图,这些图具有动态标题,您可以在我的以下代码中看到:
p <- dlply(SUBTOT_DATE, .(SITE, SP), function(x) {
ggplot(x, aes(YEAR, SUMIA, group=SITE)) +
geom_point(size=3, color="red2") +
geom_line(size=1, color="red2") +
ggtitle(ggtitle(bquote(atop(.("Evolution de l'indice d'abondance"), atop(italic(.(paste(unique(as.character(x$SITE))," - ",unique(as.character(x$SP))))), ""))))) +
theme_bw() +
xlab("Année") +
ylab("Somme des IA") +
theme(legend.direction ="vertical",legend.position = "bottom") +
guides(color=guide_legend(ncol=2))
})
这很好用,我得到了正确的情节标题(SITE 和 SP 的粘贴)。
我写的下一步是使用由SITE 和SP 组成的动态名称保存每个图的循环:
for( i in 1:length(p)) {
filename<- paste(i, "_", unique(as.character(SUBTOT_DATE$SITE), "_",
unique(as.character(SUBTOT_DATE$SP)), ".png", sep="")
png(file=filename)
print(p[i])
dev.off()
}
由于某种原因,我必须在文件名中添加一个数字(迭代号:i),否则一定是某处发生冲突,我的情节没有保存。此代码正在工作并使用由两个变量组成的名称保存每个图形。
但是文件名是错误的,并且不符合情节标题。这并不奇怪,因为这两个块之间没有联系。
我尝试将保存命令放入dlply 函数中,如下所示:
filename <- paste(unique(as.character(x$SITE)), "_",
unique(as.character(x$SP)), ".png", sep="")
这应该可以工作,但事实并非如此!由于某种原因,所有保存的地块都是相同的。现在我不能确定它是否在情节标题之后以正确的名称保存情节。
我错过了语法错误吗?为什么多次保存只有一个情节?根据我对保存循环部分中冲突问题的经验,我猜它应该通过简单地在文件名中添加一个数字来回答(即使它不能以相同的名称保存两个图,因为我没有双打) .但我不知道如何访问 dlply 中的迭代号以将其添加到文件名中。
我很难发布可重现的数据,因为每次 dlply 迭代使用数百行。
【问题讨论】:
-
p是列表,你必须使用[[操作符来提取单个元素,即print(p[[i]])(见?"[[") -
既然您使用的是 ggplot,请查看 ggsave 函数。它让您的生活更轻松。
-
感谢zelite,我不知道这个功能,它工作得很好!
标签: r