2015-12-21 73 views
2

R中的pdf設備似乎有不一致的輸出尺寸。 例如:尺寸不一致pdf設備

library(grid) 
pdf("myplot1.pdf", width=.51, height=.255) 
grid.rect(width = 1, height=1, gp=gpar(col="red")) 
dev.off() 

導致不完整的矩形:

enter image description here

當寬度和高度是相當圓形,

pdf("myplot2.pdf", width=.5, height=.25) 
grid.rect(width = 1, height=1, gp=gpar(col="red")) 
dev.off() 

矩形描繪良好:

enter image description here

與其他設備(如png)不會發生此問題。似乎PDF文件的大小向下舍入,而R仍然使用原始大小進行繪圖。

+0

你有問題嗎?你是問如何輸出一個邊界,即使是不規則的大小,或者你問爲什麼這樣做? –

+0

是的,兩者都是有趣的,但特別是第一個:如何輸出邊界不論pdf的大小。 –

回答

0

根據不同的應用,可以縮短框的尺寸:

pdf("myplot3.pdf", width=.51, height=.255) 
grid.rect(height=0.95,width=0.95, gp=gpar(col="red")) 
dev.off() 

enter image description here

pdf("myplot4.pdf", width=.5, height=.25) 
grid.rect(height=0.95,width=0.95, gp=gpar(col="red")) 
dev.off() 

enter image description here

這是一個完美的解決方案,但可能是功能性的。

+0

這將是我的後備解決方案。根本不理想,因爲在某些情況下,邊界和圖像邊界之間留有空間。我試圖計算這個盒子應該縮小多少,但不知道該怎麼做,因爲我不知道爲什麼,以及它的表現如何。 –

+0

同意。在乳膠文檔中創建PDF輸出時,我遇到了這個問題,這是我不得不求助的解決方案。 –

1

我找到了解決辦法。 顯然,pdf文檔被舍入到最接近的1/72英寸。仍然不知道爲什麼。

不管怎樣,這個包裝就可以了:

pdf2 <- function(file, width, height, ...) { 
    rnd <- function(x) x %/% (1/72)/72 
    do.call("pdf", c(list(file=file, width=rnd(width), height=rnd(height)), list(...))) 
} 
+0

最有可能相關:單位1/72英寸,即*印刷點*,是PDF的內部測量單位。我不得不諮詢規範是否允許文檔大小的浮點值。它可能只是R的PDF引擎的限制。 – usr2564301

+0

感謝您的澄清! –