2010-10-22 98 views
20

我喜歡ggplot生成的地塊。然而,直接獲得出版質量圖仍然有點麻煩。我通常必須在Illustrator中進行一些後期處理(即更改字體,編號圖等)。雖然我可以保存爲tiff或PNG,但eps最適合在Illustrator中操作數字(我可以取消組合對象,移動圖例/文本等)。如何在ggplot2中保留透明度?

當我保存一些透明度(或者在點或平滑的)一個對象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 

有沒有解決辦法?

+0

下面還有一個簡單的解決方案,可以將基於矢量的可編輯格式直接導出到Powerpoint,在這裏您可以輕鬆修復次要格式問題,並且完全保留透明度。看看是否適合你... – 2015-06-26 16:57:45

+0

我覺得我的答案更準確和完整地回答你的問題,所以你可能想檢查一個正確的答案 - 好吧,看看你的想法... – 2017-11-28 16:10:43

回答

16

的r EPS「設備」不支持部分透明,但是,如果我沒有記錯,它的PDF設備支持。 Illustrator中應該能夠讀取同樣便利PDF文件到EPSes,如果還是不行,請嘗試將它們轉換生成後pdftopspdf2ps,他們是完全不同的程序和pdf2ps的輸出...遜色)。

需要注意的是R不嘗試在所有來優化PDF輸出,所以即使你得到的是不需要後期製作的陰謀,你會希望通過壓縮實用程序像qpdf起碼運行。

+0

謝謝!對於OSX上的那些用戶,here是將PDF轉換爲eps的簡單工具。 – Maiasaura 2010-10-22 22:30:40

+0

呃...這不起作用。除非我錯過了一個選項,如果我嘗試使用'pdftops -eps graph.pdf graph.eps',其中圖形具有半透明矢量線條,那麼圖形的這些部分將在EPS中被柵格化。這是非常沒用(我可以轉換爲JPEG格式)。 http://tex.stackexchange.com/a/24287/13192表明postscript根本不支持半透明... – naught101 2014-01-22 00:40:16

+0

@ naught101呵呵,我認爲這已經被添加到postscript中了。我不知道你的情況是什麼,但是我會嘗試完全消除EPS文件的使用 - 例如,pdfTeX可以篡改PDF格式的圖形就好了(事實上,這比*更容易* )。 – zwol 2014-01-22 00:49:43

6

您也可以嘗試通過SVG設備出口爲SVG。不確定Illustrator是否可以讀取SVG,但Inkscape可以,而且它是開源的:)我已經在Inkscape中用R輸出到SVG做了一些很好的事情,並且保存的分組與EPS一樣。不能100%確定它處理不透明,但我相信它在SVG標準中。

+0

儘管SVG在後臺創建了怪異,大型,半透明的字母,但SVG的工作原理也是如此。背景中有一個非常大的O,X,Y.但我能夠刪除這些。所以這是另一個允許跳過轉換的選項。謝謝。 – Maiasaura 2010-10-22 22:36:01

19

我有同樣的問題與使用postscript功能。我發現grDevices包中的cairo_ps確實支持透明性(至少在Ubuntu 10.04中使用R版本2.10.1)。用法是:

cairo_ps(filename='filename.eps', width=7, height=7) 
plot(x,y) 
dev.off() 
+1

這個作品很棒!謝謝。 – Janvb 2011-08-25 13:35:33

+1

我同意:太棒了! – 2012-07-20 12:57:41

+0

您也可以添加參數fallback_resolution來控制半透明區域被光柵化的分辨率(這是在最近一次R更新中引入的)(例如,對於600 dpi,fallback_resolution = 600) – 2017-04-05 08:18:07

23

這工作:

ggsave("filename.eps", device=cairo_ps) 
+3

這是行不通的。爲什麼它沒有評論就低估了? – 2014-01-16 18:43:08

+0

我同意 - 這是我計劃經常使用的一個很好的解決方案。 – 2015-07-14 14:35:45

+3

正如這裏指出http://stackoverflow.com/a/31380625/4598520 cairo_ps自動柵格化透明度,但在低分辨率下(72 dpi) – jaimedash 2016-03-24 22:35:42

4

原則的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() 

ggsave("filename.eps", device=cairo_ps, fallback_resolution = 600) 

另一種選擇是出口到MS Office PowerPoint中矢量格式,以及做任何佈局編輯那裏。這可以通過使用ReporteRs或者是建立在我自己的export包來完成:

library(ReporteRs) 
require(ggplot2) 
mydoc = pptx() 
mydoc = addSlide(mydoc, slide.layout = "Title and Content") 
mydoc = addTitle(mydoc, "Plot examples") 
myplot = qplot(Sepal.Length, Petal.Length 
       , data = iris, color = Species 
       , size = Petal.Width, alpha = I(0.7) 
) 
# Add titles and then 'myplot' 
mydoc = addPlot(mydoc, function() print(myplot), vector.graphic=TRUE) 
writeDoc(mydoc, file = "test plot.pptx") 

enter image description here

或使用我的export包(https://github.com/tomwenseleers/export):

library(export) 
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7)) 
graph2ppt(file="plot.pptx", width=8, aspectr=sqrt(2)) 

這將導致一個完全可編輯,基於本地Office矢量DrawingML格式的高質量Powerpoint圖形,全面支持透明度。在那裏,您可以輕鬆修復較小的格式問題,並通過打印爲PDF格式導出爲高質量的PDF。

相關問題