2011-09-07 14 views
10

ggplot2: ¿Por qué Semi-Transparencia + pdflatex Causa Fuentes PDF más Pesadas que Normal?ggplot2: ¿Por qué Semi-Transparencia + pdflatex Causa Fuentes PDF más Pesadas que Normal?

me he encontrado un problema en el pdf() ing en I y luego una imagen de ggplot2 pdflatex -ing hace que todo el texto en la misma página que la imagen se torne envalentonado, pero sólo cuando alpha < 1. Aquí hay un mínimo ejemplo en I:

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) 

la comparación de los archivos de salida test1.pdf y test2.pdf, noto que el último documento tiene fuentes más pesados ​​cuando se ve en Acrobat o Acrobat Reader. El problema se ha discutido here anteriormente, pero no hay resolución.

Parece que no puedo resolver el problema, lo que arruina el aspecto de los informes que genero con Sweave. ¿Alguien tiene alguna idea al respecto? Estoy usando R versión 2.13.1 en Windows.

+0

Pensé que el póster de esa pregunta, @ SFun28, había ofrecido una solución ... use ghostscript. –

+0

@ SFun28 no fue explícito en su solución, pero traté de usar 'embedFonts()' en R y también ghostscript para tocar el archivo: 'gswin32c.exe -dNOPAUSE -dBATCH -dAutoRotatePages =/None -sDEVICE = pdfwrite -sOutputFile = ./test2gs.pdf./test2.pdf'. Ambos disminuyeron el tamaño del archivo, pero ninguno corrigió la fuente más pesada. – priscian

+0

¿Ves las fuentes más pesadas cuando te fijas en test1-fig.pdf y test2-fig.pdf? ¿O la diferencia solo se puede discernir después de ejecutarla a través de pdxlatex? –

Respuesta

2

Pruebe la función pdf() con un argumento, 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") 

parece ser ligeramente mejor que colormodel = "rgb" en mi entorno (Win XP, Adobe Acrobat 9 Pro).

enter image description here

+0

Estoy viendo lo mismo. Esto parece ser una solución al "problema" cuando el problema realmente existe. – priscian

+0

De las diversas pruebas, parece plausible que haya una vulnerabilidad en el dispositivo pdf, o al menos una característica inesperada, cuando el archivo contiene material semitransparente. Para reducirlo, uno podría intentar trazar un ejemplo mínimo que no dependa de 'ggplot2'. 'biblioteca (cuadrícula); grid.rect (gp = gpar (fill = "azul", alfa = 0.2)); grid.text ("prueba") 'contra alfa = 1. – baptiste

+0

Sí, estoy de acuerdo. Hice una consulta a Adobe Systems Inc. sobre este problema. –

2

¿Puedes intentar ver si es un problema con R o ggplot2 o Sweave o pdflatex, o simplemente tu visor de PDF? No puedo reproducir el problema. Aquí hay una captura de pantalla con Adobe Reader en 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

Según @priscian, aparentemente no Sweave o pdflatex ya que se ve en los archivos pdf directos creados por 'pdf()' –

+0

@Brian Diggs de hecho. El siguiente paso es usar grid en lugar de 'ggplot2', o incluso gráficos base. – baptiste

2

Creo que es una cuestión de anti-aliasing hacer que el texto parezca más audaz/grande. Puedo verlo en el título del eje, pero no en las etiquetas. Y es más pronunciado a menores aumentos. No puedo probar nada, y una diferencia de los dos archivos PDF no fue esclarecedora para mí.

Al 200%:

View of PDFs in Acrobat Reader at 200%

Al 800%:

View of PDFs in Acrobat Reader at 800%

generada usando el siguiente código (que elimina la Sweave y pasos 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) 

Información de la sesión:

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

Estoy viendo lo mismo, especialmente con aumentos menores. Curiosamente, no veo las diferencias de peso de fuente en el visor de PDF de TeXworks (basado en la biblioteca [Poppler] (http://poppler.freedesktop.org/)). Este "problema" puede ser simplemente una cuestión de anti-aliasing atada al espectador, como usted ha dicho, y como tal no necesita una solución. Gracias por probar – priscian

1

hace esto hilo de la lista de correo ggplot2 ayuda en absoluto?

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

El resultado es tratar puttting la siguiente línea en el preámbulo de su documento LaTeX:

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

Si usted sigue los enlaces de la discusión de correo ggplot2 lista de temas, encontrará el hilo con esta solución potencial en última instancia, publicado en:

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

Espero que ayude, pero veo que Baptiste ha pesado tanto aquí como en la pregunta de ggplot2, por lo que quizás esto no resuelva el problema.

+0

He agregado una línea comentada por LaTeX '\ pdfpageattr' en mi código original para cualquier persona que quiera probar su adición.En Acrobat Reader noté un cambio de la audacia del texto de la trama al cuerpo del documento con la adición pero, como se indicó anteriormente, YMMV. En cualquier caso, no parece representar una "solución" completa del problema, pero tal vez alguien más que lea esto podrá sintetizar el problema/solución completa de las pruebas que ya hemos realizado. Gracias. – priscian

Cuestiones relacionadas