在Word 2010中导入和导出R eps文件

6

我在将R中的eps文件导出并导入Word 2010时遇到了问题。

我正在使用ggplot2绘制图表,例如:

library(ggplot2)
p <- qplot(disp,hp,data=mtcars) + stat_smooth()
p

即使调用了setEPS(),以下任何一个都无法生成可以成功导入的文件。
ggsave("plot.eps")

postscript("plot.eps")
print(p)
dev.off()

奇怪的是,如果我使用GUI菜单中的“文件”->“另存为”->“Postscript”来生成图表,则可以正确导入。但是,当Word文档随后导出为pdf时,图形中的字体会有些锯齿状。
所以我的问题是:
1. 什么样的(ggsave / postscript)设置组合允许我生成可以导入Word 2010的eps文件? 2. 如何确保Word文档导出为pdf时字体保持清晰?
更新
经过更多调查,我用cairo_ps来生成图表取得了更多成功。然而,导入Word时没有任何文本显示。
此外,在latex文档中检查各种eps输出(cairo_ps、从GUI保存、ggsave),似乎Word中的eps导入过滤器相当差劲,因为打印/ pdf输出与latex文档的质量不匹配。 ggsave版本(使用postscript)确实存在一些颜色问题,而其他两种方法则没有这些问题。
结论是这是一个Word问题,因此fortune(109)不适用。我很乐意被证明是错误的,但我将授予回答并赠送谁能提供可以在命令形式下复制GUI输出的命令的奖励。

可能是Word 2007+的问题:“无法在Word 2007中使用eps图形并制作pdf”。 - Alexey Popkov
同时,在下面提供一个解决方案,使用刚刚在CRAN上发布的新导出包。 - Tom Wenseleers
5个回答

4

我使用postscript命令的colormodel="rgb"选项(默认为"srgb"),解决了从R导出.eps文件并在Windows 7上导入Word 2010的问题。

postscript("RPlot.eps", height = 4, width = 4, horizontal = FALSE, 
         paper = "special", colormodel = "rgb")
library(ggplot2)
p <- qplot(disp,hp,data=mtcars) + stat_smooth(se=FALSE, method="loess")
p
dev.off()

4

这对我有效...按照后记帮助页面中的建议操作:

 postscript("RPlot.eps", height = 4, width = 4, horizontal = FALSE, onefile = FALSE,
             paper = "special")
 library(ggplot2)
 p <- qplot(disp,hp,data=mtcars) + stat_smooth()
 p
#geom_smooth: method="auto" and size of largest group is <1000, so using loess. Use 'method = x' to #change the smoothing method.
#Warning message:
#In grid.Call.graphics(L_polygon, x$x, x$y, index) :
#  semi-transparency is not supported on this device: reported only once per page
 dev.off()
#quartz 
#     2 

有趣的结尾提醒你,这只是一个经过Mac测试的解决方案,目前为止。编辑:我刚刚在R版本2.15.1(2012-06-22)--“烤棉花糖”中进行了测试:平台:i386-pc-mingw32 / i386(32位)和Win XP中的MS Word 2007,它可以工作。命令是插入/图片.../选择eps格式/选择文件。编辑2:除了直接使用postscript设备之外,还有另一种保存方法。在Windows中可用带有"eps"模式的savePlot方法(但在Mac中不可用)。我同意字体不如它们在Mac上看起来那么流畅,但我无法辨别通过savePlot保存和从交互窗口使用“保存”之间的质量差异。
savePlot(filename = "Rplot2", type = "eps", device = dev.cur(), restoreConsole = TRUE)

savePlot 调用 (.External(CsavePlot, 设备, 文件名, 类型, 恢复控制台))


我认为 setEPS() 会在全局范围内设置这些选项。无论如何,在 Windows 上它仍然对我不起作用。 - James
它只在某些查看模式下显示。但这是一个Word的问题,而不是R的问题。 - IRTFM
savePlot看起来是答案,但它的灵活性比其他方法少。是的,我同意,并一直知道,Word是问题所在 - 它比国家强迫症(OCD)大会上的昆虫学分会议更多怪癖和错误!不管怎样,好极了!勾选和悬赏都归你了。 - James
看起来MS Word对EPS的导入过滤器忽略了预览,因此嵌入字体非常重要。否则,预览会显得很丑陋,并且在具有适当驱动程序的PostScript打印机上打印时会出现问题。请参考extrafont - mlt

1
Word对EPS支持不太好。更好的解决方案是直接将图表以原生Office格式导出到Word或Powerpoint中。我刚刚制作了一个名为"export"的新软件包,可以完美实现此功能,请参见https://cran.r-project.org/web/packages/export/index.html和 演示请参见https://github.com/tomwenseleers/export
典型的语法非常简单,例如:
install.packages("export")
library(export)
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, 
      size = Petal.Width, alpha = I(0.7))     
graph2doc(file="ggplot2_plot.docx", width=6, height=5)
graph2ppt(file="ggplot2_plot.pptx", width=6, height=5) 

输出结果为矢量格式,所以在Word或Powerpoint中取消组合后即可完全编辑。您还可以使用它来导出各种R统计对象的统计输出。

1

你最好使用可以在Windows上创建的wmf格式。


1
我的“真正”建议当然是尽量不要碰 Word,但并非每个人都能逃脱 latex/sweave/knitr/rmd/... 。话虽如此,在过去不得不使用它的时候,wmf 是最不痛苦的选择。 - Dirk Eddelbuettel
通常我使用分辨率极高的PNG格式图片(存储大小不会太大),然后在Office文档中适当调整大小。唯一需要注意的是,在提高分辨率的同时保持“物理尺寸”(字体缩放比例等)不变。 - Ben Bolker
谢谢Dirk,我可能不得不这样做。虽然我听说过wmf的问题。令我困惑的是,我可以从GUI中获得工作的eps文件,但无法通过编程方式实现。 - James
wmf文件在密度估计图方面表现不佳。 - James
wfm不支持透明度,这是一个巨大的缺点 - 请参见上面一个很好的解决方案,将图形导出为本机Office格式,支持透明度和矢量输出。 - Tom Wenseleers
显示剩余2条评论

0

你可以使用R Studio将所有绘图编织到HTML文件中,然后使用Word打开HTML文件。

knitr教程


HTML从何时开始支持EPS,Word从何时开始支持SVG? - mlt
我并没有提到EPS。我只是在说一种将图表轻松导入Word的方法。 - jem77bfp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接