Подтвердить что ты не робот

Символы Unicode в ggplot2 Выход PDF

Как я могу использовать символы Unicode для ярлыков, титров и т.д. на графике PDF, созданном с помощью ggplot2?

Рассмотрим следующий пример:

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

В названии графика используются символы Юникода (маленькие кепки), которые на выходе отображаются как .... Проблема возникает только с графиками PDF; если я заменю последнюю строку на ggsave("t.png"), то результат будет таким, как ожидалось.

Что я делаю неправильно? R script У меня есть кодировка UTF-8. Некоторая системная информация:

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

При поиске решения этой проблемы я обнаружил несколько доказательств, в которых R использует однобайтную кодировку для чересстрочных кодировок, таких как как UTF-8 для вывода PDF или постскриптума. Я также нашел предложения, чтобы, например, получить знак евро, работающий, но не общее решение.

4b9b3361

Ответ 1

Как сказал Бен, cairo_pdf() - ваш друг. Он также позволяет встраивать шрифты без postscript (т.е. TTF/OTF) в PDF с помощью аргумента family (важно, если у вас нет шрифтов postscript, содержащих глифы, которые вы хотите использовать). Например:

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

... дает PDF файл, который выглядит так: ggplot2 graph with custom font family and non-ASCII characters in the title

См. также этот вопрос; хотя он не имеет прямого отношения к названию, там много чего о том, как заставить шрифты делать то, что вы хотите в R.

EDIT для каждого запроса в комментариях, вот код, специфичный для 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()

Чтобы использовать базовую графическую команду cairo_pdf(), достаточно просто определить семейство шрифтов с помощью команды windowsFonts(), как показано выше. Конечно, убедитесь, что вы используете шрифт, который у вас есть на вашей системе, и на самом деле у вас есть все нужные глифы.

T Инструкции о файлах DLL в комментариях ниже - это то, что я должен был сделать, чтобы команды Cairo() и CairoPDF() в library(Cairo) работали в Windows. Тогда:

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