如何保持ggplot2的透明度?

Mai*_*ura 22 r

我喜欢ggplot产生的情节.然而,直接获得出版质量图仍然有些麻烦.我通常不得不在Illustrator中进行一些后期处理(即更改字体,编号等).虽然我可以保存为tiff或png,但eps最适合在Illustrator中操作数字(我可以取消组合对象,移动图例/文本等).

当我保存一个具有一定透明度的ggplot对象(以点或更平滑)时,我收到此错误:

Warning message:
In grid.Call.graphics("L_points", x$x, x$y, x$pch, x$size) :
  semi-transparency is not supported on this device: reported only once per page
Run Code Online (Sandbox Code Playgroud)

有解决方法吗?

Ras*_*sen 29

这有效:

ggsave("filename.eps", device=cairo_ps)
Run Code Online (Sandbox Code Playgroud)

  • 正如这里指出的那样http://stackoverflow.com/a/31380625/4598520 cairo_ps会自动光栅化透明度,但会以低分辨率(72 dpi)进行光栅化 (4认同)
  • 这确实有效.为什么没有评论就被投票? (3认同)
  • 您还可以添加参数fallback_resolution来控制光栅化半透明区域的分辨率(这是在最近的R更新中引入的),例如,您现在可以使用ggsave("filename.eps",device = cairo_ps,fallback_resolution = 600 ) (2认同)

See*_*tle 19

我在使用该postscript功能时遇到了同样的问题.我发现cairo_psgrDevices包中确实支持透明度(至少在Ubuntu 10.04中使用R版本2.10.1).用法是:

cairo_ps(filename='filename.eps', width=7, height=7)
plot(x,y)
dev.off()
Run Code Online (Sandbox Code Playgroud)


zwo*_*wol 17

R的eps"设备"不支持部分透明度,但是,如果我没记错的话,它的PDF设备会支持.Illustrator应该能够读取与EPS相同的PDF,或者如果没有,尝试用它们转换它们pdftops(不是 pdf2ps,它们是完全不同的程序,而pdf2ps的输出是......劣质).

需要注意的是R不尝试优化PDF输出可言,因此,即使你得到的是不需要后期制作的阴谋,你会希望像通过压缩工具来运行它qpdf至少是.

  • 扎克:我知道。这个对我有用。但是,我不禁要提交的期刊在技术上落后。 (2认同)

Spa*_*man 6

您也可以尝试通过svg设备导出为SVG.不确定Illustrator是否可以读取SVG,但是Inkscape可以,并且它是开源的:)我在Inkscape中用R输出到SVG做了一些好事,并且分组与EPS保持一致.不能100%确定它处理不透明度,但我确定它在SVG标准中.


Tom*_*ers 5

EPS 格式原则上不支持半透明 - 如果您想要半透明并且能够在 Illustrator 或 Inkscape 中进行编辑,您最好导出为 SVG 或 PDF。如果您确实与 EPS 格式相关联,则可以使用该cairo设备,并指定需要光栅化半透明对象的分辨率(只有非半透明元素保持矢量格式,然后,半透明区域被光栅化为位图)。这样做的语法是:

cairo_ps(file = "test.eps", onefile = FALSE, fallback_resolution = 600)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7))
dev.off()
Run Code Online (Sandbox Code Playgroud)

或者

ggsave("filename.eps", device=cairo_ps, fallback_resolution = 600)
Run Code Online (Sandbox Code Playgroud)

另一种选择是以矢量格式导出到 MS Office Powerpoint,并在那里进行任何布局编辑。这可以使用我的新export包轻松完成,请参见 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) 
Run Code Online (Sandbox Code Playgroud)

这将生成一个完全可编辑、高质量的 Powerpoint 图表,采用基于原生 Office 矢量的 DrawingML 格式,并完全支持透明度。在那里,您可以轻松修复较小的格式问题,并通过打印为 PDF 导出为高质量的 PDF。

您还可以使用它导出到 Word、Excel、Latex 或 HTML,还可以使用它导出各种 R 统计对象的统计输出。

它还具有通过graph2eps(file="plot.eps", width=6, height=5, fallback_resolution=600)半透明区域的光栅化导出到 eps的功能...