2015-12-21 48 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

感谢您的澄清! –