【问题标题】:R: Semi-transparency only showing in my MacR:仅在我的 Mac 中显示半透明
【发布时间】:2019-03-03 08:31:42
【问题描述】:

我可以在 .pdf 中生成并保存 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)

该图完美地显示在我的笔记本电脑 (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  

【问题讨论】:

  • 也许可以试试ggplot2::ggsave()?但是,save_plot() 在后台调用它,所以可能不会有太大的不同。或者通过cairo_ps() 尝试使用具有光栅化透明度的 EPS。 ggsave("plot.eps", p, device=cairo_ps, fallback_resolution = 1200) 诚然,这不是一个理想的解决方案。
  • Mac 到 Android 的 Word 文档快速测试显示只有 EPS 版本有效。
  • 你不能使用 svg 并导出为 svg 而不是 pdf 吗?编辑:这个答案建议postscript与Word兼容:stackoverflow.com/questions/9555889/…
  • 另请参阅使用graph2doc回答

标签: r pdf ms-word alpha cairo


【解决方案1】:

该问题与 R 或 RStudio 无关。

问题说明:

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

为什么?从本质上讲,PDF 是 Apple 绘图系统 Quartz 的原生组件。 Mac OS X Quartz 的内部成像模型与 PDF 对象图有很好的相关性,可以轻松显示和操作 pdf 嵌入图像。

唉,Windows 操作系统并非如此。 [这不是批评,只是观察。] pdf 引擎不包含在 Windows 中,它是一个附加组件。因此,Mac OS X Word 文档将无法在 Microsoft Word for Windows 中正确呈现。除此之外,似乎没有可用的选项来为 PDF 提供 OLE 链接。

示例:

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

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

解决方法:

建议的解决方法是将图像保存为 .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

请求的附录 - 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 脚本攻击向量。

例子:

【讨论】:

  • 这是我经过一些测试后所怀疑的。谢谢!如果我将我的图形保存为 .eps 并将它们嵌入 Word 文档中,我会遇到同样的问题吗? ggsave("plot.eps", p, device=cairo_ps, fallback_resolution = 1200)
  • @fede_luppi Microsoft Word 似乎执行 EPS 到 EMF 格式的隐式转换,以解决 EPS 嵌入脚本攻击向量。请参阅更新的答案。保重。
【解决方案2】:

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

我之前在 Word 中插入 PDF 图像时遇到过格式问题,无论是否透明。

【讨论】:

  • 1) 我喜欢矢量图的外观,2) 期刊明确要求矢量图格式。我可以在初始阶段提交手稿,文档中嵌入 .png,最后阶段单独包含 pdf 版本。但是具有足够质量的 .png 图形会使文档太重,因此更难以处理。不过,我对替代工作流程持开放态度。
猜你喜欢
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多