我需要将图表从R中保存为EMF格式(windows图元文件格式),因为这使得图表在Microsoft的屏幕和纸上看起来很好。没有其他选项(PNG、postscript等)可以很好地处理这两种情况。PNG设备产生的是糟糕的res图。修改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 output中的一幅图?我能把它的输出塞进什么东西里然后得到一个图吗?这必须是可能的,因为如果我使用RStudio的导出功能,我会在屏幕和纸上得到一个非常好看的图表。但是我想对此进行编码,这样我就不必手动导出文件了。
我已经在网上搜索过了,也没能找到任何解决这个问题的方法。我们将非常感谢您的帮助!
发布于 2013-07-28 08:30:33
我刚才使用devEMF包进行了尝试,尽管它发出了警告,但它看起来就像您在这里创建的图片。
您只需要install.packages('devEMF'),然后:
require(devEMF)
emf('imPic.emf')
print(pp)
dev.off()https://stackoverflow.com/questions/17482555
复制相似问题