首先一个警告:我张贴了这个问题,在这里上的超级用户,但它显然是错误的地方要问R课题.我认识到这不是一个直接的编程问题,但我相信它可以通过改变图的产生方式来解决(即通过适当的编码).所以我希望读者认为这适合论坛.
R图通常完全由矢量图形元素(即点,线,多边形,文本)组成.R允许您以各种格式保存图形(或复制粘贴),包括各种栅格格式,PDF格式或Windows元文件.
我通常将图像保存为PDF并打印出来.这使得图像完全按照我的预期在纸上呈现,质量最高.我避免使用光栅格式(例如JPG,TIFF)进行打印,因为质量不可避免,而且出版商更喜欢矢量格式.
但是,我需要使用Microsoft Word 2007制作一个大型多页桌面发布文档,因此不能使用PDF.当我从元文件导入我的数字,或直接从R复制并粘贴到Word时,图像的屏幕和打印渲染都会略有变化(例如,多边形及其填充会略微错位).
鉴于我想保持高矢量质量(而不是使用光栅格式),我可以做些什么来使R矢量图形与Word一起使用?(当然Sweave和LaTeX会很好,但同样不是一个现实的选择).
考虑这个例子:
plot(c(1:100), c(1:100), pch=20)
## Copy and paste to Word 2007 as Windows metafile
## Print
## Quality is poorer (e.g. dot fills misaligned with borders)
pdf("printsPerfectly.pdf")
plot(c(1:100), c(1:100), pch=20)
dev.off()
## Now print PDF
## Quality is as expected
Run Code Online (Sandbox Code Playgroud)
编辑:继续@John的建议我把它作为EPS postscript文件(见下文)制作,将它作为图片插入Word.因为最终它将从Word创建的PDF打印,我使用默认的Word 2007设置将其转换为PDF,将其打印在我的HP Laserjet P1606dn激光打印机上,然后拍摄照片以说明多边形边框和填充不对齐的问题(图像左侧,下方).我也直接用R从PDF制作它pdf()并使用PDF打印并拍摄照片(右下图).

它可能看起来像小土豆!但是当你为了达到高质量而遇到很多麻烦时,最终被挫败是令人失望的.此外,这里并不是很明显,但数字并不像PDF(右)那样高质量(左),而忽略了对照片的关注差异.
Tom*_*ers 20
对我来说上面的当前最佳答案是不可接受的,因为如果一个人去制作一个漂亮的基于矢量的图形的麻烦,人们想要做的最后一件事就是将它光栅化为位图......除非它是一个可递增的复杂图形需要很长时间才能以矢量格式呈现,或类似的东西,但对于大多数图形而言并非如此.
最好的解决方案是直接以本机Office矢量格式导出到Word.我刚刚制作了一个新的软件包,export允许人们完全允许将图形或统计表导出到Word和Powerpoint,请参阅
https://cran.r-project.org/web/packages/export/index. html和演示请参阅
https://github.com/tomwenseleers/export
例如:
install.packages("export")
library(export)
?graph2ppt
?graph2doc
?table2ppt
?table2doc
## export of ggplot2 plot
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species,
size = Petal.Width, alpha = I(0.7))
# export to Word
graph2doc(file="ggplot2_plot.docx", width=7, height=5)
# export to Powerpoint
graph2ppt(file="ggplot2_plot.pptx", width=7, height=5)
Run Code Online (Sandbox Code Playgroud)

您还可以使用该功能导出到增强型图元文件
graph2emf(file="ggplot2_plot.emf", width=7, height=5)
Run Code Online (Sandbox Code Playgroud)
但原生Office格式的质量更好.
对于最终制作,如果需要,您也可以从Powerpoint将其打印成PDF格式,然后它将保持良好的矢量格式.
Joh*_*ohn 16
您唯一的选择是使用高分辨率光栅图形.一旦你超过300 dpi,它将与矢量打印完全无法区分; 它只会制作更大的文件..你的复制和粘贴方法是在72 dpi进行,看起来很糟糕.如果从文件导入,您可以在文件中获得分辨率,事情会好得多.幸运的是,Office 2007应该处理png图像,这些图像对典型图形具有最佳压缩效果.假设您希望图像宽4英寸,高6英寸......
png('printsGreat.png', width = 4, height = 6, units = 'in', res = 300)
plot(c(1:100), c(1:100), pch=20)
dev.off()
Run Code Online (Sandbox Code Playgroud)
此外,Office 2007应该能够处理EPS文件,并且当您打印一页时,R postscript文件默认为EPS兼容.
postscript("printsPerfectly.eps", width = 4, height = 6, horizontal = FALSE, onefile = FALSE)
plot(c(1:100), c(1:100), pch=20)
dev.off()
Run Code Online (Sandbox Code Playgroud)
但如果你没有运气,请回到高分辨率图像.
我首选的解决方案是使用windows图元文件设备进行绘图,例如:
win.metafile("mygraph.wmf")
print(gg1)
dev.off()
Run Code Online (Sandbox Code Playgroud)
这会生成一个*.wmf文件,可以将其复制粘贴到word文件中.
由于我尝试在 R 中以高分辨率生成 png 并且它似乎在我的 PC 上不起作用(如果我将分辨率设置为高于 300 dpi,R 会产生诸如“无法启动 png 设备”之类的错误),我发现的方法是使用 postscript() 保存图形,然后使用 GSView 将 ps 文件转换为具有 600 dpi 分辨率的 png。MS Word 愉快地使用 png 并且打印质量似乎是完美的。