R отображает некоторые символы Юникода, но не другие

наш системный администратор просто обновил нашу операционную систему до SLES12SP1. Я переустановил Rv3.2.3 и попытался сделать графики. Я использую cairo_pdf и пытаюсь сделать сюжет с x-меткой, являющейся \u0298 то есть символом солнца, но он не работает: ярлык просто выходит пустым. Например:

cairo_pdf('Rplots.pdf')
plot(1, xlab='\u0298') # the x-label comes up blank
dev.off()

Раньше это работало, но по какой-то причине этого больше нет. Он работает с другими персонажами, например

cairo_pdf('Rplots.pdf')
plot(1, xlab='\u2113') # the x-label comes up with the \ell symbol
dev.off()

Когда я просто вставляю символ Солнца, т.е.

plot(1, xlab='ʘ')

то я получаю предупреждение

Warning messages:
1: In title(...) :
  conversion failure on 'ʘ' in 'mbcsToSbcs': dot substituted for <ca>

Машина немецкая, но я использую английский язык UTF-8 в США:

> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: SUSE Linux Enterprise Server 12 SP1

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=en_US.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

Любые советы о том, как я могу получить символ солнца?

Ответы

Ответ 1

Возможно, ваш текстовый редактор использует latin1, поэтому вы должны отправлять символы latin1 на вашу консоль.

Посмотрите на кодировку

Encoding('ʘ')

и/или попробуйте

plot(1, xlab=iconv('ʘ', from='latin1', to="UTF-8"))

но будьте осторожны, кодировка может измениться при копировании. Если вы используете Notepad++, вы можете конвертировать в текстовом редакторе между различными кодировками.

Ответ 2

Примечание. Предполагаю, что с новой системой вы должны сначала сделать:

capabilities() #And see what the result for cairo is.

Несколько идей, хотя один из них требует знания того, какие шрифты вы используете, поэтому может потребоваться вывод l10n_info()$MBCS и names(X11Fonts()).

Вариант 1) Шрифты Hershey имеют все астрологические знаки как специальные символы побега. Страница 4:

 demo(Hershey)   # has \\SO as the escape sequence for the "solar" symbol.

Поэтому, глядя на код для функции draw.vf.cell мы видим, что он использует text функцию для построения этих символов и поэтому ее использование для обозначения оси потребует добавления xpd=TRUE к аргументам:

plot(1, xlab="") ; text(1, .45, "\\SO" , vfont=c("serif", "plain"), xpd=TRUE )

enter image description here

Вариант 2) найдите символ солнца в выбранном вами шрифте. Вы можете попробовать установить шрифт на что-то другое, кроме "Helvetica". См. ?X11 который имеет раздел о Каирских шрифтах. Страница справки функции функции points имеет функцию TestChars, которая позволяет печатать глифы символов в разных шрифтах на вашем устройстве вывода. В этом случае ваше устройство вывода может быть либо cairopdf либо x11. На моем устройстве (Mac fork UNIX) шрифт Arial имеет этот вывод:

   png(type="cairo-png");plot(1, xlab="\u0298");dev.off()

Мое наблюдение за годы подобных вопросов заставляет меня поверить, что каирская графика более надежно кросс-платформенная. Но так как R может быть скомпилирован без поддержки cairo, это не обязательно.

enter image description here