R:仅在我的Mac中显示半透明

时间:2019-03-03 08:31:43

标签: r pdf ms-word alpha cairo

我可以生成并保存.pdf格式的ggplot图形,包括半透明(alpha):

library(ggplot2)
library(cowplot)
p <- qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = 0.5)
save_plot("plot.pdf",p)

enter image description here

该图可以完美地显示在我的笔记本电脑(Mac)中,既可以单独显示为pdf,也可以嵌入到Word文档中。但是,多年来,我一直在痛苦地体验到,我的图形中的半透明通常不会显示在其他人的计算机上,通常是当他们看到它们嵌入在Microsoft Office文档中时。当我不得不在观众面前做演讲时,这特别痛苦。突然,我在会议室计算机中的Powerpoint演讲中的数字什么也没显示,只是空白。如果我向期刊提交论文,并且收到编辑的电子邮件,说我的数字未在Word文档中显示任何内容,那么这也是有问题的。由于这些数字在我的Mac电脑上看起来还不错,因此我没有办法找出这些数字是否正确,除非明确要求其他人查看包含这些数字的文档。

我尝试了一些在网上找到的解决方法,例如:

save_plot("plot.pdf",p, useDingbats=F)

save_plot("plot.pdf",p, device = cairo_pdf, fallback_resolution = 1200

但是我仍然收到来自合作者的电子邮件,说他们看不到这些数字,并且在演示中仍然遇到一些尴尬的时刻,因为这些数字没有显示出来,所以我无法说明我的观点。

如何在不丢失信息的情况下将数字保存为pdf?在这一点上,我不知道此问题是否与R中数字的构造方式有关,还是与Microsoft Office处理具有半透明性的pdf数字有关的问题。事实是,我的研究网络中没有其他人遇到这些问题。

仅供参考

> capabilities()
       jpeg         png        tiff       tcltk         X11        aqua    http/ftp 
       TRUE        TRUE        TRUE        TRUE        TRUE        TRUE        TRUE 
    sockets      libxml        fifo      cledit       iconv         NLS     profmem 
       TRUE        TRUE        TRUE        TRUE        TRUE        TRUE        TRUE 
      cairo         ICU long.double     libcurl 
       TRUE        TRUE        TRUE        TRUE  

2 个答案:

答案 0 :(得分:2)

问题与R或RStudio无关。

问题说明:

问题与Mac OS X上Microsoft Word文档中嵌入式图像的创建和转换过程以及Windows中Microsoft Word如何呈现文档有关。

为什么?本质上,PDF是Apple绘图系统Quartz的本地组件。 Mac OS X Quartz的内部成像模型与PDF对象图具有很好的相关性,从而易于显示和处理pdf嵌入式图像。

A,Windows操作系统不是这种情况。 [这不仅仅是批判,只是观察。] pdf引擎不包含在Windows中,它是一个附加组件。因此,Mac OS X Word文档将无法在Windows的Microsoft Word中正确呈现。除此之外,似乎没有可用的选项来具有到PDF的OLE链接。

示例:

在Mac OS X中,可以简单地将pdf图像拖放到Word文档中。显示的图像将显示为:

enter image description here

现在,如果我们使用Windows 10 PC并打开文档,我们将看到:

enter image description here

解决:

建议的解决方法是将图像另存为.png或.jpg并将其插入到word文档中。

library(ggplot2)
library(cowplot)
p <- qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = 0.5)
save_plot("plot.pdf",p)
save_plot("plot.png",p)
save_plot("plot.jpg",p)

结果:

Windows 10上的Microsoft Word

enter image description here

已请求附录-EPS

考虑的另一种选择是使用

ggsave("plot.eps", p, device=cairo_ps, fallback_resolution = 1200)

这确实有效,但是,在Windows 10的渲染图像中发现了条纹。

由于安全攻击向量,EPS隐式转换为EMF:

这些条纹似乎与发生的隐式对话有关,因为安全限制,Word将EPS图像转换为EMF格式。

https://support.office.com/en-us/article/support-for-eps-images-has-been-turned-off-in-office-a069d664-4bcf-415e-a1b5-cbb0c334a840

因此,您可以插入EPS图像,但是它似乎已转换为EMF以阻止EPS Embedded脚本攻击向量。

示例:

enter image description here

答案 1 :(得分:0)

输出文件必须是PDF吗?您是否不仅可以将图形直接另存为支持透明度的其他文件类型(例如.png),然后将其插入演示文稿或Word文件中?

在使用Word插入PDF图像之前,无论是否透明,都存在格式问题。