如何在R中保存分层pdf(通过Sweave?)

tim*_*ffe 10 pdf latex r sweave

我已经搜索了SO,谷歌搜索,阅读?pdf,并且关于将图表保存为pdf的可能性,其中图层可以在pdf查看器边距中打开和关闭.什么我谈论的例子是美国地质勘探局四地形地图,它可以下载与多层,如PDF (压缩PDF).

pdf()帮助文件中的以下句子听起来不祥,但我也想检查一下我是不是误解了它:

 The R graphics model does not distinguish graphics objects at the level 
 of the driver interface.
Run Code Online (Sandbox Code Playgroud)

我曾经能够在Illustrator中保存分层的pdf,但我不再使用这个程序了.也许有人可以想到R内部的解决方法?我用来映射的数据很大,但这里有一个玩具示例:

pdf("2objects.pdf")
plot(NULL, type = "n",xlim = c(0,1),ylim = c(0,1))
rect(0,.7,.7,0,border = "blue",lwd=2)
rect(.3,1,1,.3,border = "red",lty=2,lwd=2)
dev.off()
Run Code Online (Sandbox Code Playgroud)

它看起来像这样(这是一个png,但上面会给出一个pdf) 在此输入图像描述

我希望能够将红色和蓝色框作为具有可见性的图层,可以在pdf查看器中打开和关闭.

非常感谢!

编辑:在R-help中找到线程(re:@mnel),看起来不可能.我仍然会打开这个问题,万一有人提出了一个漂亮的R-tastic解决方法.

编辑(2012年9月5日):我尝试通过Sweave执行此操作,并使用此处发布的解决方法取得了部分成功.此方法生成带有"图层"的单个pdf,可以使用图像下方的超链接文本打开和关闭这些图层.它使用'动画'技巧来实现.虽然它仍然不是我最终的期望结果,但它的优势在于不依赖于特定的pdf观众.我仍然会等着看是否有人发布了一个方法来做一个层,也就是一个Sweave文档中的OCG,然后我可以自动化.

编辑(2012年9月13日):我使用上面提到的代码发布了我的进展答案.我能够让它在更复杂的现实世界中工作,而不会改变代码,在美国内部覆盖不同的行政和统计边界.在这种情况下,我只命名为不同的地图叠加layer-0.pdf,layer-1.pdf等等,和它的工作没有错误.我仍然希望最终能在这里出现更好的东西.

谢谢大家的评论

Mai*_*ura 1

我能够通过 实现这一目标ggplot

library(ggplot2)
df <- data.frame(x = c(1,10), y = c(20,40), class = 1:2)
layered_plot <- ggplot(df, aes(xmin = x, xmax = x + 1, ymin = y, ymax = y + 2, fill = class)) +
geom_rect() + 
opts(legend.position = "none") 
# Now save this as pdf
ggsave(layered_plot, file="p1.pdf")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

(这只是用于png说明的版本,但是当我在 Illustrator 中打开时pdf,我可以根据需要关闭各个图层)。

在此输入图像描述