R plots some unicode characters but not others
Asked Answered
A

2

14

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?

Abbasid answered 28/2, 2016 at 12:46 Comment(0)
L
4

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

Lundquist answered 19/3, 2018 at 20:12 Comment(0)
F
3

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.

Fatimafatimah answered 28/2, 2016 at 13:41 Comment(2)
Also, > Encoding("ʘ") [1] "UTF-8"Abbasid
Then I don't know but maybe the issue is that you don't use german as your local. Sys.setlocale("LC_TIME", "de_DE.UTF-8") I use R version 3.2.3 (2015-12-10) and have as locale locale: [1] LC_CTYPE=de_AT.UTF-8 LC_NUMERIC=C [3] LC_TIME=de_AT.UTF-8 LC_COLLATE=de_AT.UTF-8 [5] LC_MONETARY=de_AT.UTF-8 LC_MESSAGES=de_AT.UTF-8 [7] LC_PAPER=de_AT.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_AT.UTF-8 LC_IDENTIFICATION=C and it works. But I don't know for sure.Fatimafatimah

© 2022 - 2024 — McMap. All rights reserved.