2010-10-22 17 views
20

Amo i grafici generati da ggplot. Tuttavia, è ancora piuttosto complicato ottenere direttamente grafici di qualità di pubblicazione. Di solito devo fare un po 'di post-elaborazione in Illustrator (cioè cambiare i caratteri, numerare i numeri ecc.). Mentre potrei salvare come tiff o png, eps è il migliore per manipolare le figure in Illustrator (posso separare oggetti, spostare la legenda/testo ecc.).Come posso mantenere la trasparenza in ggplot2?

Quando ho salvare un oggetto ggplot con un po 'di trasparenza (sia in punti o un più agevole) ottengo questo errore:

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 

C'è una soluzione?

+0

Di seguito anche una soluzione facile da esportare in un formato vettoriale modificabile direttamente su Powerpoint, in cui è possibile risolvere facilmente problemi di formattazione minori e con la massima trasparenza. Vedi se ti va bene ... –

+0

Penso che la mia risposta qui sotto risponda in modo più accurato e completo alla tua domanda, quindi potresti voler controllare che sia la risposta corretta - beh, guarda cosa ne pensi ... –

risposta

16

Il "dispositivo" di R non supporta la trasparenza parziale, ma, se non ricordo male, il suo dispositivo PDF lo fa. Illustrator dovrebbe essere in grado di leggere i PDF con la stessa facilità di EPS o, in caso contrario, provare a convertirli dopo la generazione con pdftops (nonpdf2ps, sono programmi totalmente diversi e l'output di pdf2ps è ... inferiore).

Nota che R non cerca di ottimizzare il proprio output PDF affatto, quindi, anche se si vuole ricevere una trama che non ha bisogno di post-produzione, si consiglia di eseguire attraverso un programma di utilità di compressione come qpdf per lo meno .

+0

Grazie! Per quelli di voi su OSX, here è uno strumento semplice da convertire da pdf a eps. – Maiasaura

+0

Ehm ... questo non funziona. A meno che non manchi un'opzione, se provo 'pdftops -eps graph.pdf graph.eps', dove il grafico ha linee vettoriali semitrasparenti, allora quelle parti del grafico saranno rasterizzate nell'EPS. Questo è praticamente inutile (posso anche convertire in jpeg). http://tex.stackexchange.com/a/24287/13192 indica che postscript non supporta affatto la semitrasparenza ... – naught101

+0

@ naught101 Huh, ho pensato che fosse stato aggiunto a postscript ad un certo punto. Non so quale sia la tua situazione, ma proverei a eliminare del tutto l'uso di file EPS - pdfTeX, ad esempio, può ingannare la grafica in formato PDF semplicemente bene (in realtà è * più facile * che farlo mangiare EPS). – zwol

6

Si potrebbe anche provare ad esportare come SVG tramite il dispositivo svg. Non sono sicuro se Illustrator può leggere SVG, ma Inkscape può, ed è open source :) Ho fatto alcune cose positive con l'output R in SVG in Inkscape, e i raggruppamenti sono conservati come con EPS. Non posso essere sicuro al 100% che gestisca l'opacità, ma sono sicuro che sia nello standard SVG.

+0

SVG funziona anche se ha creato lettere strane, grandi, semitrasparenti sullo sfondo. C'era un grande O, X, Y sullo sfondo. Ma sono stato in grado di rimuovere quelli. Quindi questa è un'altra opzione che consente di saltare la conversione. Grazie. – Maiasaura

19

Ho avuto gli stessi problemi con l'utilizzo della funzione postscript. Ho trovato che cairo_ps dal pacchetto grDevices supporta la trasparenza (almeno in Ubuntu 10.04 con R versione 2.10.1). Uso sarebbe:

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

funziona alla grande! Grazie. – Janvb

+1

Sono d'accordo: fantastico! –

+0

È inoltre possibile aggiungere l'argomento fallback_resolution per controllare la risoluzione in cui le aree semitrasparenti vengono rasterizzate (questo è stato introdotto in un recente aggiornamento R) (ad esempio fallback_resolution = 600 per 600 dpi) –

23

Questo funziona:

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

Questo funziona. Perché è stato downvoted senza commento? –

+0

Sono d'accordo: questa è un'ottima soluzione che prevedo di usare frequentemente. –

+3

Come indicato qui http://stackoverflow.com/a/31380625/4598520 cairo_ps rasterizza automaticamente la trasparenza, ma lo fa a bassa risoluzione (72 dpi) – jaimedash

4

Il formato EPS in linea di principio non supporta semi-trasparenza - se si vuole semi-trasparenza ed essere in grado di modificare in Illustrator o Inkscape si sarebbe esportare meglio in formato SVG o PDF. Se sei davvero legato al formato EPS, puoi comunque utilizzare il dispositivo e specificare a quale risoluzione gli oggetti semitrasparenti devono essere rasterizzati (solo gli elementi non semitrasparenti rimangono come formato vettoriale, tuttavia, le aree semi-trasparenti vengono rasterizzate per bitmap). La sintassi per fare questo è:

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() 

o

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

Un'opzione alternativa è quella di esportare in MS Office PowerPoint in formato vettoriale, e fare qualsiasi layout editing lì.Questo può essere fatto utilizzando ReporteRs o il mio proprio pacchetto export che è costruito su di esso:

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

o utilizzando il mio pacchetto 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)) 

questo si traduce in una completamente modificabili , grafico Powerpoint di alta qualità in formato DrawingML basato su vettoriale nativo di Office, con pieno supporto per la trasparenza. Qui puoi facilmente risolvere piccoli problemi di formattazione ed esportare in un PDF di alta qualità stampando su PDF.

Problemi correlati