Postscript / ggplot2 device R - 纸张大小

Postscript / ggplot2 device R - Paper size

我正在尝试使用 ggplot2 和来自 grDevices 的 postscript 设备创建特定大小的 EPS 文件(用于 public 论文 publication)。

问题是,当我使用边界框下方的代码时,它是完全错误的,而不是将纸张大小调整为我设置的大小,grDevices 将其绘制在 A4 纸上。

我不知道我在这里错过了什么。

library(ggplot2)
library(grDevices)
dat <- data.frame(cond = rep(c("A", "B"), each=10),
              xvar = 1:20 + rnorm(20,sd=3),
              yvar = 1:20 + rnorm(20,sd=3))

g<-ggplot(dat,aes(x=xvar, y=yvar   ))  + 
   geom_point(aes(x=xvar, y=yvar   ))
g
setEPS(paper="special",width = 6.75,height = 2.79,horizontal = FALSE, onefile = FALSE)

postscript(file ="Test.eps")
print(g)
dev.off()

EPS 文件没有介质尺寸,这是 EPS 的要求之一。

EPS 文件声明由 EPS 程序制作的标记的边界框,并且封闭文档应在 EPS 包含在封闭的 PostScript 程序中时更改 CTM,以便按比例缩放 EPS 以覆盖所需的区域媒体。

所以你实际上不能 "adapt the size of the media" 使用 EPS 程序,而且 BoundingBox 可能不是不正确的(它不符合你的意图的事实并不能说明它是错误的)

如果您将 EPS 发送到 PostScript 解释器,它可能(如果您幸运的话)在默认媒体上绘制它。它可能会给你一个空白页,因为 EPS 文件也不允许使用 'showpage' 运算符!

如果您使用Ghostscript 来解释EPS 程序,您可以使用-dEPSCrop 将媒体设置为EPS 的BoundingBox。我不确定,但如果您设置 -dFitPage,Ghostscript 可能会重新缩放 EPS 以适应当前媒体大小。如果您想要默认(A4 或 Letter)以外的介质尺寸,您必须首先指定 -dDEFAULTPAPERSIZE,或使用其中一个控件来设置介质尺寸(例如 -g 或 -dMEDIAWIDTHPOINTS/MEDIAHEIGHTPOINTS)

如果您想在 BoundingBox 以外的媒体尺寸上绘制 EPS,最简单的方法可能是编写一个 PostScript 程序来设置媒体尺寸,设置 CTM 来定位和缩放 EPS,然后包括 EPS,然后最后使用 showpage 将渲染的内容传输到输出媒体。