如何将图像保存为R完全像'存储'一样?

问题描述:

我用ggplot2和多个方面生成了一个随机示例图。我感兴趣的是各个面板的确切位置,并且希望导出这些面板的相对开始和结束坐标以及图的图片(基本上用于通过JavaScript上下文中的mouseover事件进行点识别)。如何将图像保存为R完全像'存储'一样?

要获得我需要的相关坐标信息,请使用网格包。假设p是存储我的图的变量(在p <- ggplot(...)之后)。

随着

pb <- ggplot_build(p) 
pta <- ggplot_gtable(pb) 
heights <- pta$heights 

和类似的宽度,我得到的信息。 例如,在这种情况下我得到heigths

[1] 1lines    0cm+0lines   1null    
[4] 0.25lines   1null    0.25lines   
[7] 1null    0.532222222222222cm 1grobheight+0.5lines 
[10] 0.5lines 

其中具有单元的条目null表示面板。为了能够比较这些,我必须将它们转换成相同的单位。 null我不能转换,但剩下的。使用视口是1npc(NPC是单位太)的宽度和长度是可以解决的方程式,让我创建下列图像与grid.lines()画出的线(从RStudio图解窗口的屏幕截图):

enter image description here

所以一切似乎工作。现在,如果我重新缩放RStudio中的绘图窗口,则会在错误的位置绘制线条。原因是有些单位如grobheight依赖于当前的视口。因此,如果我想要保存图像(比如600 x 600像素),我必须做

png(fn, width = 600, height = 600) 
pushViewport(viewport(width=0.5, height=0.5, xscale=c(0, 600), yscale=c(0, 600))) 
print(p) 
... #draw the lines 
dev.off() 

但是。 尽管如此,无论我如何保存图像,例如ggsave()png()(后者与print(p)grid.draw(pta)grid.draw(pta)),实际比例不同于在R环境中正确的计算出的比例。 一定数量的小剧情似乎被切断了,显然还有额外的缩放。 一个PNG出口看起来像这样的例子:

enter image description here

的差异似乎很小,但这样做没有帮助。那么,是否有办法像gtable对象pta中描述的那样完全保存图像?这是一个dpi或分数的问题吗?

非常感谢您的帮助,

米卡

我这个确切的问题,遇到的一切都源于回在png()pdf()或任何输出呼叫的高度和宽度的呼叫。使用高度和宽度进行播放,以便更好地确定它的外观。

如果您想知道在导出使用x11(height= width=)时看起来是什么样子,请注意这里的单位是“in”,因此您需要在输出函数中模拟它。