在ggplot2中展平alpha通道

7

ggplot2的一些对象(函数)支持alpha通道。

http://docs.ggplot2.org/current/geom_point.html

这是一个不错的功能,但在pdf和png文件中使用透明颜色经常会导致各种问题。

我该如何使用alpha选项并获得扁平化的pdf输出文件?


你可能需要使用外部PDF工具来完成这个任务......虽然除了Adobe Acrobat之外的选择似乎很有限..... http://askubuntu.com/questions/128595/flattening-pdf-transparency - Ben Bolker
2个回答

3
我曾经遇到一个问题,使用knitr + ggplot创建的大型Latex文档在我的Mac上可以完美阅读,但Windows用户无法打开。尝试了多次优化和压缩PDF文件,最终发现问题出在一个alpha-heavy图上。对于我的情况来说,将输出方式从pdf改为png有所帮助(不过根据您的问题描述,似乎png并不能解决您的问题)。
如果您正在使用knitr,可以通过将全局(或特定块)图像输出选项“dev”设置为“png”而自动创建png版本。根据绘图的复杂性,这可以显著减小alpha-heavy ggplot的大小和复杂度。我曾经将绘图文件大小从约700KB降低到约70KB(不过某些更简单的绘图可能会增加文件大小)。
权衡之处是绘图的分辨率可能会有所损失。如果只是通过电子邮件传递草稿或者针对某些类型的绘图,则这可能没问题。如果分辨率损失太大,则可以考虑调整输出的dpi(当然,这会增加文件大小,但在跨平台环境中可能仍然更好)。
要将全局图像输出设置为“png”,可以使用以下代码:
    library(knitr)
    opts_chunk$set(dev="png", dpi=200)

在特定的块中(例如仅涉及透明度的情节),使用 dev="png" 选项将输出设置为“png”。下面的示例生成常规、非透明度重的情节。对于 knitr + Latex,include=FALSE 选项将防止自动包含 pdf 版本(我不确定这是否对 RMarkdown 有必要)。
    <<myplot, dev="png", dpi=200, include=FALSE>> 
    library(ggplot2)
    x <- 1:1000
    y <- 2*x + rnorm(1000, 0, 100)
    df <- data.frame(x,y)  
    ggplot(df, aes(x=x, y=y)) + geom_point(alpha=.3)
    @

上述代码将生成一个名为myplot.png的文件,然后可以在Latex中使用figure环境嵌套的includegraphics命令轻松地将其包含在文档中。
    \begin{figure}[h!]
    \centering
    \scalebox{.5}{\includegraphics{myplot.png}}
    \caption{Some caption \label{fig:myplot}} 
    \end{figure}

另一个可能有帮助的资源是托管在R博客上的这篇博客文章:

使用knitr快速发布:导出图片以进行共享和出版

此外,请参见knitr选项中的绘图部分。


0
为了避免LaTex中类似图形的问题,我使用R生成png文件。在那里,您可以使用type = c("cairo", "cairo-png", ...)选项进行调整,对我来说,"windows"效果很好。之后,我使用imagemagick将其转换为jpg,并将此jpg包含在我的LaTeX文件中,然后pdfLaTeX会产生扁平化的PDF输出。

转换为 jpeg 格式会显著降低绘图的质量。 - Jonas Stein

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