如何通过win.metafile()导出arrangeGrob输出

时间:2013-07-05 06:37:04

标签: r rstudio

我需要将R中的图保存为EMF格式(windows图元文件格式),因为这样可以使图表在Microsoft Word中的屏幕和纸张上看起来很好。没有其他选择(PNG,postscript等)在两者上运作良好。 PNG设备会产生较差的重建图。修改res参数会炸毁图形元素,我找不到任何能够清楚地解释如何缓解这一点的内容。使用postscript打印输出非常好。但是,Word的EPS过滤器被破坏,因此我无法在屏幕上看到EPS文件。我需要一些在屏幕和纸上都能正常工作的东西。 win.metafile只能做到这两点。

这是扭曲。我正在使用gridExtra来自定义绘图的布局。从我收集的内容来看,这意味着我正在将多个绘图写入一个设备(然后我想将其导出到EMF)。但我知道win.metafile每个文件只允许一个图。来自?win.metafile

  

对于win.metafile,每个文件只允许一个绘图

所以以下内容不起作用:

library(ggplot2)
library(gridExtra)
# g_legend pinched from Hadley:
# https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs
g_legend <- function(a.gplot)
{
  tmp <- ggplot_gtable(ggplot_build(a.gplot))
  leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
  legend <- tmp$grobs[[leg]]
  return(legend)
}
win.metafile(file='test.emf', width=6, height=4)
p <- ggplot(mtcars, aes(x=cyl, y=mpg, colour=factor(gear)))
pl <- p + geom_point()
legend <- g_legend(pl)
lwidth <- sum(legend$width)
pp <- arrangeGrob(pl + theme(legend.position="none"), legend)
pp
dev.off()

实际上我收到以下错误消息:

  

grid.newpage()出错:无法创建元文件'test.emf'

确定。所以这是我的问题:如何欺骗win.metafile只能看到来自arrangeGrob输出的一个图?我可以将其输出填充到某些并获取一个图吗?它必须是可能的,因为如果我使用RStudio的导出功能,我会在屏幕和纸张上获得一个很好看的图表。但我想编纂这个,所以我不必手动导出文件。

我在网上搜索过,但却找不到任何可以解决此问题的内容。非常感谢帮助!

1 个答案:

答案 0 :(得分:2)

我刚刚使用devEMF包尝试了这个,虽然它会发出警告,但它看起来就像你在这里创建的图片。

您只需要install.packages('devEMF')然后:

require(devEMF)
emf('imPic.emf')
print(pp)
dev.off()