2011-02-05 14 views
5

Estoy haciendo algunas parcelas en R. Los archivos PDF resultantes no se muestran correctamente en los dispositivos iOS como el iPhone. Por ejemplo, he aquí una cifra de existencias ggplot2 creado en formato PDF:Emitir cifras mostrando PDF creados con R en dispositivos iOS

library(ggplot2) 
mpg.eg <- within(mpg[1:74,], { 
    model <- reorder(model, cty) 
    manufacturer <- reorder(manufacturer, -cty) 
}) 

pdf(file="figures/ios-example.pdf") 
p <- qplot(cty, model, data=mpg.eg) 
p + facet_grid(manufacturer ~ ., scales="free", space="free") + 
    opts(strip.text.y = theme_text()) 
dev.off() 

Cuando se ve en un iPhone, no se muestran los puntos de la gráfica de puntos. Consulte, por ejemplo, the resulting pdf si está en un dispositivo iOS.

Entiendo por la lectura de los documentos que esto es probablemente un problema con la disponibilidad de fuente limitada y los caprichos de la representación de PDF en iOS, no es un problema con la creación de pdf en R. Pensé que tal vez incrustar fuentes en el PDF con

embedFonts("figures/ios-example.pdf") 

solucionarían las cosas, pero no es así. ¿Hay algo que pueda hacer para solucionar este problema de iOS más allá de solo hacer que la figura esté disponible en algún otro formato?

+0

Hola Kieran. Si lo documentado se puede ver en una computadora 'real', entonces el problema probablemente sea con el visor de iOS. ¿Sería una alternativa el cambio a formatos que no sean en formato pdf? –

+0

Hola Dirk, que sí, que se pueden ver en un ordenador normal --- como se puede ver en la cuestión estaba básicamente determinado los documentos estaban en lo correcto y que era un problema iOS/iPhone. – Kieran

Respuesta

4

embedFonts por defecto no integra el conjunto de fuentes PDF estándar, y por lo tanto en realidad no hacer ningún cambio significativo en el ejemplo PDF. Trate lugar

embedFonts("figures/ios-example.pdf", 
      options="-dSubsetFonts=true -dEmbedAllFonts=true") 

y si que no funciona, tachuela "-dPDFSETTINGS=/printer" en allí también.

Por lo que vale la pena, sin embargo, su ejemplo se muestra correctamente en el único dispositivo iOS tengo a mano (iPad, OS versión 4.2.1).

+2

Gracias por la respuesta rápida. Su solución funciona con la opción '-dPDFSETTINGS =/printer' agregada a las otras dos. Tengo acceso a 4.2.1 en un iPhone 3GS en lugar de un iPad, y definitivamente estaba fallando allí. – Kieran

+0

También tuve que configurar '-dUseCIEColor'. Dios mío, es bastante molesto requerir este "post-procesamiento" con ghostscript (incluso si R hace el trabajo por ti), supongo que simplemente ya no usaré ggplot2. –

4

También puede probar diciendo R que no se utilice la fuente Script para dibujar puntos: pdf(..., useDingbats = F)

+0

¡Gracias, Hadley! – Kieran

+0

Hubiera pensado que esta era la respuesta "correcta" para la plataforma de destino de iOS. La incrustación de fuentes realmente puede agregar volumen a los tamaños de archivo. –

+2

cierto, pero por otro lado, 'embedFonts' corre el PDF a través de Ghostscript que significa que el flujo de contenido real ahora está comprimido y (IIRC) operadores de dibujo redundantes se eliminan, a diferencia de lo que hace R sí mismo. Eso podría fácilmente más que compensar el tamaño de las fuentes. – zwol