2017-07-17 443 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

非常感謝你,這正是我沒有得到的。 –