Caracteres Unicode en PDF ggplot Salida

¿Cómo puedo usar caracteres Unicode para tags, títulos y cosas similares en un diagtwig PDF creado con ggplot2?

Considere el siguiente ejemplo:

library(ggplot2) qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ") ggsave("t.pdf") 

El título de la gráfica usa caracteres Unicode (letras mayúsculas), que en el resultado aparecen como ... El problema ocurre solo con diagtwigs de pdf; si reemplazo la última línea con ggsave("t.png") , la salida es la esperada.

¿Qué estoy haciendo mal? El script R que tengo está en encoding UTF-8. Alguna información del sistema:

 R version 2.14.1 (2011-12-22) Platform: x86_64-pc-linux-gnu (64-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=C LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base 

Al buscar una solución para este problema, encontré algunas pruebas de que R usa una encoding de un solo byte para codificaciones de varios bytes, como UTF-8 para PDF o salida de postscript. También encontré sugerencias para, por ejemplo, poder hacer que el signo del euro funcione , pero no hay una solución general.

Como sugirió Ben, cairo_pdf() es tu amigo. También le permite incrustar fonts que no sean postscript (es decir, TTF / OTF) en el PDF a través del argumento family (crucial si no tiene ninguna fuente PostScript que contenga los glifos que desea usar). Por ejemplo:

 library(ggplot2) cairo_pdf("example.pdf", family="DejaVu Sans") qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ") dev.off() 

… da un PDF que se ve así: Gráfico ggplot2 con familia de fuentes personalizadas y caracteres no ASCII en el título

Ver también esta pregunta ; aunque no se ve directamente relevante desde el título, hay mucho sobre cómo conseguir fonts para hacer lo que quieras en R.

EDIT por solicitud en los comentarios, aquí está el código específico de Windows:

 library(ggplot2) windowsFonts(myCustomWindowsFontName=windowsFont("DejaVu Sans")) cairo_pdf("example.pdf", family="myCustomWindowsFontName") qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ") dev.off() 

Para utilizar el comando de gráficos base cairo_pdf() , bastará con definir primero su familia de fonts con el windowsFonts() , como se muestra arriba. Por supuesto, asegúrese de usar una fuente que realmente tenga en su sistema, y ​​que en realidad tenga todos los glifos que necesite.

Las instrucciones sobre los archivos DLL en los comentarios a continuación son lo que tuve que hacer para que los comandos Cairo() y CairoPDF() en la library(Cairo) funcionaran en Windows. Entonces:

 library(ggplot2) library(Cairo) windowsFonts(myCustomWindowsFontName=windowsFont("DejaVu Sans")) CairoPDF("example.pdf") par(family="myCustomWindowsFontName") qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ") dev.off()