【问题标题】:Postscript / ggplot2 device R - Paper sizePostscript / ggplot2 device R - 纸张大小
【发布时间】:2017-07-17 12:30:57
【问题描述】:

我正在尝试使用 ggplot2 和来自 grDevices 的 postscript 设备创建一个特定大小的 EPS 文件(用于公共论文出版)。

问题是,当我使用边界框下方的代码时,它是完全错误的,我没有将纸张的大小调整为我设置的 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()

【问题讨论】:

    标签: r ggplot2 graphics postscript eps


    【解决方案1】:

    EPS 文件没有媒体大小,这是 EPS 的要求之一。

    EPS 文件声明由 EPS 程序制作的标记的 BoundingBox,并且随附文档应在 EPS 包含在随附 PostScript 程序中时更改 CTM,以便缩放 EPS 以覆盖所需的媒体区域.

    因此,您实际上无法使用 EPS 程序“调整媒体的大小”,并且 BoundingBox 可能并不正确(它与您的意图不匹配的事实并不意味着它是错误的)

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

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

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

    【讨论】:

    • 非常感谢,这正是我没有得到的。
    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    相关资源
    最近更新 更多