2017-07-17 146 views
0

我正尝试使用ggplot2和grDevices的postscript设备在特定尺寸(用于公共纸张出版物)上创建EPS文件。Postscript/ggplot2设备R - 纸张尺寸

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

回答

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)

如果您希望在除BoundingBox之外的其他介质上绘制EPS,则可能最容易编写PostScript程序来设置介质尺寸,将CTM设置为放置并缩放EPS,然后包括EPS,最后使用showpage传输渲染的内容到输出媒体。

+0

非常感谢你,这正是我没有得到的。 –

相关问题