1

我需要将 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从安排格罗布输出中只看到一个图?我可以把它的输出塞进东西里然后画出一个情节吗?这一定是可能的,因为如果我使用 RStudio 的导出功能,我会在屏幕和纸上得到一个非常漂亮的图表。但我想对此进行编码,因此我不必手动导出文件。

我在网上搜索过,但找不到任何可以解决这个问题的东西。帮助将不胜感激!

4

1 回答 1

2

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

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

require(devEMF)
emf('imPic.emf')
print(pp)
dev.off()
于 2013-07-28T08:30:33.170 回答