将带有Alpha通道(透明度)的图像从R导出到Word

7
我想将一个由 R 生成的图形导出到 Word。这个图形包含透明度(alpha 通道)。以下是一些示例代码——当导出到 Windows 元文件时,它会抛出一个错误:
警告信息: 在 plot.xy(xy, type, ...) 中: 半透明在此设备上不受支持:每页仅报告一次
导出为 SVG 可以产生期望的结果,但是这种图像格式不受 MS Office 支持。有没有办法解决这个问题?在保留 alpha 通道的情况下可以使用哪种图像类型?PNG 是可能的,但这并不会产生非常清晰的图形——它会失去清晰的矢量图像。
# Get some colours with transparency (alpha = 0.6)
col.dot <- rainbow(5, alpha = .6)

# Save to svg file - OK
svg("test_fig.svg")
plot(1:5,col = col.dot, pch=15)
dev.off()

# Save to wmf - warning "semi-transparency is not supported on this device..."
win.metafile("test_fig.wmf")
plot(1:5,col = col.dot, pch=15)
dev.off()

我需要补充说明,这是在Windows系统上(Windows 8 64位,使用Word 2013)。


1
在这里查看一些选项...http://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/png.html - Jean V. Adams
以下还有一个可能更好、更现代的解决方案,涉及直接导出到Powerpoint,生成一个完全可编辑的图形,同时保留透明度——您可能会将其作为正确答案检查一下... - Tom Wenseleers
2个回答

6
我刚刚制作了一个新的包export,可以轻松地将R图形导出到Office(Word、Powerpoint)中,详情请见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))     
graph2ppt(file="ggplot2_plot.pptx", width=6, height=5) 

输出的是矢量格式,解组 PowerPoint 中的图形后即可完全编辑。您还可以将其用于导出到 Word、Excel、Latex 或 HTML,并且还可以将其用于导出各种 R 统计对象的统计输出。

enter image description here

这样可以得到原生的基于向量的 DrawingML 格式的高质量可编辑 Powerpoint 图形,如果您愿意,您还可以轻松地将其复制和粘贴为增强型图元文件。与从 R 导出的 EMF 不同,它还完全支持透明度。


谢谢您的建议。我不知道这个新包。它做了我要求的一切,甚至更多! - Tom Evans
刚刚更新了我的答案,使用了我新发布在CRAN上的导出包。 - Tom Wenseleers

2

通过win.metafile的帮助:

屏幕设备支持线条、填充和文本的半透明颜色。这些功能适用于保存(从“文件”菜单)为PDF、PNG、BMP、JPEG和TIFF,但如果保存为元文件和PostScript,则会被忽略。

因此,您无法在元文件中使用透明度。您可以尝试将其保存为png并增加输出的分辨率。


感谢您的建议。我在增加PNG分辨率时遇到的问题是,它会导致相同线条粗细等参数下更大的图形,因此如果以相同大小显示,则符号和线条将显得太小,除非也进行放大。我认为最好的解决方案可能是导出为SVG,然后使用另一个应用程序(如@IShouldBuyABoat上建议的“UniConvertor”)进行文件转换。 - Tom Evans
1
你可以通过增加图形的大小并改变“res”参数来解决这个问题。默认情况下,res=72,请尝试将其增加到res=300或其他值。我经常这样做。有关更多信息,请参阅png的帮助文档,您不需要更改lwd或其他内容。 - Ricardo Oliveros-Ramos
谢谢您的建议。我没有意识到您可以更改PNG文件输出的分辨率。我已经接受了您的答案,因为它最接近我想要的,但仍然希望对于元文件也是可能的 ;) - Tom Evans

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