我需要将 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 的导出功能,我会在屏幕和纸上得到一个非常漂亮的图表。但我想对此进行编码,因此我不必手动导出文件。
我在网上搜索过,但找不到任何可以解决这个问题的东西。帮助将不胜感激!