2011-09-07 4 views
10

ggplot2: Perché Semi-Transparency + pdflatex causa font PDF più pesanti del normale?ggplot2: Perché Semi-Transparency + pdflatex causa font PDF più pesanti del normale?

ho incontrato un problema in cui pdf() ing in R e poi pdflatex -ing un'immagine ggplot2 causa tutto il testo sulla stessa pagina come immagine per diventare incoraggiato, ma solo quando alpha < 1. Ecco un minimo esempio nella R:

require("ggplot2") 
"%_%" <- function(a, b) paste(a, b, sep="") 
test <- function(filename, alpha) 
{ 
    pdf(filename %_% "-fig.pdf") 
    p <- ggplot(mtcars, aes(wt, mpg)) + geom_point(alpha=alpha) 
    print(p); dev.off() 

    latexDocument <- c(
    "\\documentclass{article}", 
    "\\usepackage{Sweave}", 
    "%\\pdfpageattr{/Group <</S /Transparency /I true /CS /DeviceRGB>>}", 
    "\\begin{document}", 
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", 
    "\\begin{figure}", 
    "\\includegraphics{" %_% filename %_% "-fig}", 
    " \\caption{Figure Caption}", 
    "\\end{figure}", 
    "\\end{document}") 

    con <- file(filename %_% ".tex"); writeLines(latexDocument, con); close(con) 
    system("pdflatex " %_% filename) 
} 

test("test1", 1) 
test("test2", 0.3) 

Confrontando i file di output test1.pdf e test2.pdf, ho notato che il secondo documento ha i caratteri più pesanti quando viene visualizzato in Acrobat o Acrobat Reader. Il problema è stato discusso here prima, ma senza risoluzione.

Non riesco a risolvere il problema, che rovina l'aspetto dei rapporti che genera con Sweave. Qualcuno ha qualche idea in esso? Sto usando R versione 2.13.1 su Windows.

+0

Ho pensato che il poster di quella domanda, @ SFun28, avesse offerto una soluzione ... usare ghostscript. –

+0

@ SFun28 non era esplicito nella sua soluzione, ma ho provato a usare 'embedFonts()' in R e anche ghostscript per toccare il file: 'gswin32c.exe -dNOPAUSE -dBATCH -dAutoRotatePages =/None -sDEVICE = pdfwrite -sOutputFile = ./test2gs.pdf./test2.pdf'. Entrambi hanno ridotto la dimensione del file, ma nessuno dei due ha corretto il carattere più pesante. – priscian

+0

Vedete i caratteri più pesanti quando guardate test1-fig.pdf e test2-fig.pdf? Oppure la differenza è visibile solo dopo averla eseguita attraverso pdxlatex? –

risposta

2

Prova la funzione pdf() con un argomento, colormodel = "cmyk"?

require("ggplot2") 
pdf("test_cmyk.pdf", colormodel = "cmyk") 
ggplot(mtcars, aes(wt, mpg)) + geom_point(size = 3, alpha = 0.2) + 
    opts(title = "cmyk, alpha = 0.2") 
dev.off() 
embedFonts("test_cmyk.pdf") 

sembra essere leggermente migliore rispetto colormodel = "rgb" nel mio ambiente (Win XP, Adobe Acrobat 9 Pro).

enter image description here

+0

Sto vedendo la stessa cosa. Questo sembra essere una soluzione al "problema" quando il problema esiste realmente. – priscian

+0

Dai vari test, sembra plausibile che ci sia un buglet nel dispositivo pdf, o almeno una funzionalità inaspettata, quando il file contiene materiale semitrasparente. Per restringerlo, si potrebbe provare a tracciare un esempio minimo che non si basa su 'ggplot2'. 'Biblioteca (griglia); grid.rect (gp = gpar (fill = "blue", alpha = 0.2)); grid.text ("test") 'vs. alpha = 1. – baptiste

+0

Sì, sono d'accordo. Ho fatto una richiesta ad Adobe Systems Inc. su questo problema. –

2

Puoi provare a vedere se si tratta di un problema con R o ggplot2 o Sweave o pdflatex, o semplicemente il tuo visualizzatore di pdf? Non riesco a riprodurre il problema. Ecco uno screenshot utilizzando Adobe Reader su Mac OS 10.6, enter image description here

sessionInfo() 
R version 2.13.1 (2011-07-08) 
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) 

locale: 
[1] en_NZ.UTF-8/en_NZ.UTF-8/C/C/en_NZ.UTF-8/en_NZ.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets grid  methods  base  

other attached packages: 
[1] ggplot2_0.8.9 proto_0.3-9.2 reshape_0.8.4 plyr_1.6  
+0

Secondo @priscian, apparentemente non Sweave o pdflatex poiché è visto nei file pdf diretti creati da 'pdf()' –

+0

@Brian Diggs in effetti. Il prossimo passo è usare la griglia al posto di 'ggplot2', o anche la grafica di base. – baptiste

2

penso che sia una questione di anti-aliasing rendere il testo look più audace/grande. Posso vederlo sul titolo dell'asse, ma non sulle etichette. Ed è più pronunciato a bassi ingrandimenti. Non posso provare nulla, e un diff dei due PDF non mi ha illuminato.

al 200%:

View of PDFs in Acrobat Reader at 200%

A 800%:

View of PDFs in Acrobat Reader at 800%

generati utilizzando il seguente codice (che elimina la Sweave e gradini pdflatex)

require("ggplot2") 
"%_%" <- function(a, b) paste(a, b, sep="") 
test <- function(filename, alpha) 
{ 
    pdf(filename %_% "-fig.pdf") 
    p <- ggplot(mtcars, aes(wt, mpg)) + geom_point(alpha=alpha) 
    print(p); dev.off() 
} 

test("test1", 1) 
test("test2", 0.3) 

Informazioni sulla sessione:

R version 2.13.1 (2011-07-08) 
Platform: x86_64-pc-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] grid  stats  graphics grDevices utils  datasets methods 
[8] base  

other attached packages: 
[1] xtable_1.5-6   ggplot2_0.8.9  proto_0.3-9.2  
[4] reshape_0.8.4  plyr_1.6    microbenchmark_1.1-0 

loaded via a namespace (and not attached): 
[1] digest_0.5.0 tools_2.13.1 
+0

Sto vedendo la stessa cosa, specialmente a bassi ingrandimenti. È interessante notare che non vedo differenze di peso nei font nel visualizzatore PDF di TeXworks (basato sulla libreria [Poppler] (http://poppler.freedesktop.org/)). Questo "problema" potrebbe effettivamente essere solo una questione di anti-aliasing legato allo spettatore, come hai detto tu, e come tale non ha bisogno di una soluzione. Grazie per il test – priscian

1

Questo filo dalla lista ggplot2 mailing aiuto a tutti?

http://groups.google.com/group/ggplot2/browse_thread/thread/80016f7ac2a28f28/7f5b7f2c1bd9f716

Il risultato è quello di provare puttting la seguente riga nel preambolo del documento LaTeX:

\pdfpageattr {/Group << /S /Transparency /I true /CS /DeviceRGB>>} 

Se seguite i link dalla discussione lista filo ggplot2 mailing, troverete il filo con questo potenziale soluzione definitiva pubblicato su:

http://tug.org/pipermail/pdftex/2007-December/007480.html

Spero di essere d'aiuto, ma vedo che Baptiste ha pesato sia qui che sulla domanda ggplot2, quindi forse questo non risolve il problema.

+0

Ho aggiunto una riga '\ pdfpageattr' commentata LaTeX nel mio codice originale per chiunque voglia testarne l'aggiunta.In Acrobat Reader ho notato uno spostamento di audacia dal testo della trama al corpo del documento con l'aggiunta ma, come sopra, YMMV. In ogni caso, non sembra rappresentare una "correzione" completa del problema, ma forse qualcun altro che leggerà questo sarà in grado di sintetizzare il problema/soluzione completo dai test che abbiamo già fatto. Grazie. – priscian

Problemi correlati