Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R plots some unicode characters but not others

Tags:

r

unicode

cairo

our sysadmin just upgraded our operating system to SLES12SP1. I reinstalled Rv3.2.3 and tried to make plots. I use cairo_pdf and try to make a plot with the x-label being \u0298 i.e. the solar symbol, but it doesn't work: the label just comes out blank. For example:

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

This used to work, but for some reason it does not anymore. It works with other characters, e.g.

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

When I just paste in the solar symbol, i.e.

plot(1, xlab='ʘ')

then I get the warning

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

The machine is German, but I am using the US English UTF-8 locale:

> 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

Any tips on how I can get the solar symbol to appear?

like image 837
rhombidodecahedron Avatar asked Feb 28 '16 12:02

rhombidodecahedron


2 Answers

Note: I suppose with a new system you should first do:

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

A couple of ideas although one of them requires knowing what fonts you are using so the output of l10n_info()$MBCS and names(X11Fonts()) might be needed.

Option 1) The Hershey fonts have all the astrological signs as special escape characters. Page 4 of the output of :

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

So looking at the code for the draw.vf.cell function we see that it's using the text function to plot those characters and therefore using it to label an axis will require adding xpd=TRUE to the arguments:

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

enter image description here

Option 2) find the solar symbol in the font of your choice. You might try setting the font to something other than "Helvetica". See ?X11 that has a section on Cairo fonts. The points function's help page has a function called TestChars that lets you print character glyphs in various fonts to your output device. In this case your output device might be either cairopdf or x11. On my device (the Mac fork of UNIX) the Arial font has this output:

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

My observation over the years of similar questions leads me to believe that Cairo graphics are more reliably cross-platform. But since R can be compiled without cairo support, it's not a sure thing.

enter image description here

like image 110
IRTFM Avatar answered Nov 11 '22 02:11

IRTFM


Maybe your text editor is using latin1, therfore you would send latin1 characters to your console.

Look at the encoding

Encoding('ʘ')

and / or try

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

but be carefull the encoding could change while coping. If you use Notepad++ you can convert in the text editor between the different encodings.

like image 41
Florian Avatar answered Nov 11 '22 03:11

Florian