Это не так просто, как может показаться.Технически, эта проблема зависит от OS / locale / pdf writer / Sweave (см. «Установка и администрирование R», глава 7).Поскольку я использую GNU / Linux, это «решение» не адресовано пользователям Mac и Windows.И чтобы сделать все немного сложнее, дистрибутивы GNU / Linux отличаются, так что есть большая вероятность, что если что-то работает, скажем, на Ubuntu, не работает на Arch Linux.
Я буду использоватьmtcars
набор данных.Давайте создадим некоторый базовый график с локализованными символами:
pdf("foo.pdf")
boxplot(mpg ~ cyl, data = mtcars, ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja")
dev.off()
(ускоренный курс сербского языка: "Potrošnja goriva" означает расход топлива, "Broj cilindara" означает # цилиндров и "Dijagram"raspršenja "эквивалентен scatterplot)
Теперь я получаю кучу предупреждений:
Warning messages:
1: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <c5>
2: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <a1>
3: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <c5>
4: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <a1>
5: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <c5>
6: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <a1>
7: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <c5>
8: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <a1>
Хотя options(encoding = "CP1250")
не помогает, я получаю те же предупреждения,pdf.options(encoding = "CP1250")
исправляет это, и то же самое означает pdf(file = "foo.pdf", encoding = "CP1250")
.Итак, я вернусь к своей старой кодировке с помощью options(encoding = "native.enc")
, установлю pdf.options
, как уже было сказано выше, и все получится правильно.
Некоторые пользователи уходят, просто установив pdf.options
, и не получают проблем с Sweave,Таким образом, вы должны вставить эту часть кода где-нибудь в файл .Rnw, прежде чем начать рисование:
<<setOptions, echo = FALSE, results = hide>>==
pdf.options(encoding = "CP1250")
@
и позже, просто выполните:
<<plotTheFigure, echo = TRUE, fig = TRUE>>==
# I've set echo to TRUE intentionally, to prove my point here
boxplot(mpg ~ cyl, data = mtcars, ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja")
@
И тот же сценарий стоитдля графиков ggplot2.
Некоторые из вас получат правильный вывод, а я нет!И, как я уже говорил, если вы работаете в Ubuntu, есть большой шанс, что это сработает, но сейчас я не могу заставить его выжить и пнуть в Arch.
ИСохраняя нажатия клавиш, вы можете загрузить Sweave-файл и / или PDF-файл (выполняется на компьютере Arch).Как видите, локализованные символы правильно отображаются в функции сюжета, но искажаются в Sweave.Теперь, если я пытаюсь сохранить график в файл PDF (без Sweaving), я получаю правильный вывод .
Итак, я решил некоторые проблемы, но есть много пробныхОсталось выполнить задание с ошибкой.
Пожалуйста, запустите файл .Rnw на своем компьютере и дайте мне некоторую обратную связь.Чтобы упростить задачу, я создал Rscript, который собирает вашу системную информацию (не личную информацию), которую я считаю уместной в данном случае: здесь ' source , а вот мой output .