[R] How to draw a per mille symbol?

Gavin Simpson gavin.simpson at ucl.ac.uk
Wed Sep 20 13:15:44 CEST 2006


On Wed, 2006-09-20 at 15:28 +1200, Paul Murrell wrote:
> Hi
> 
> 
> Gavin Simpson wrote:
> > Dear list,
> > 
> > Following advice posted to this list a while back by Prof Ripley [1], I
> > have been trying to draw a per mille character [2] in an axis label.
> > 
> > This should give the correct character:
> > 
> > plot(1:10, ylab = "\u2030")
> > 
> > but all I get is '"S'. I'm running linux (FC5) and have fonts installed
> > that have the correct character (viewed in the Gnome character map at
> > least).

Thanks for your reply Paul, and also to Andrew Robinson for his earlier
reply. I had initially avoided trying to use the encoding argument and
pdf() as I had planned to include the code to produce the graphics in a
Sweave document and AFAICS there is no way to pass extra arguments to
the code generating the pdf figures in Sweave? Of course, my original
plan was ignorant of the details of font encodings and mappings to
single byte encodings in pdf and postscript devices and wouldn't have
worked anyway.

> 
> 
> I get the same thing (and using xfd I see the per mille character in the 
> font I'm using).  I'm afraid I'm not sure why this is happening;  I can 
> get a number of other "unusual" characters to work (e.g., \u20ac), but 
> there appear to be some characters that do not draw correctly.  I used 
> the following code to explore the default Helvetica font I've got and I 
> can't see a rational pattern in the misbehaviour.
> 
> x11(width=5, height=5)
> grid.prompt(TRUE)
> digits <- c(0:9, letters[1:6])
> for (i in c("00", "01", "02", "03", "1e", "20", "21", "22")) {
>      grid.newpage()
>      for (j in 1:16) {
>          for (k in 1:16) {
>              pushViewport(viewport(x=j/16, y=1-k/16,
>                                    width=1/16, height=1/16,
>                                    just=c("right", "bottom")))
>              eval(parse(text=paste('grid.text("\\u',
>                           i, digits[k], digits[j], '")', sep="")))
>              popViewport()
>          }
>      }
> }
> 

That is a nice tool for looking at the font glyphs, which I can see
being very useful in working out which unicode number matches the
character you want to display. I'm not too clued up on grid graphics
yet, would it be easy to modify the above to print out the \uXXXX code
above each glyph?

> 
> > I have also tried plotting to a pdf device with a font family that the
> > character map tool shows I have a per mille glyph for, e.g.:
> > 
> > pdf("~/tmp/test_per_mille.pdf", paper = "a4", family = "URWBookman")
> > plot(1:10, ylab = "\u2030")
> > dev.off()
> > 
> > But all I get here is a period or a dot-like symbol.
> 
> 
> This is an encoding problem I think.  For producing PDF output, the 
> character string gets converted to a single-byte encoding.   If your 
> default locale is ISOLatin1 like mine then you won't see the per mille 
> because that character (called perthousand in the Adobe afm's) is not in 
> the ISOLatin1 encoding.  If you explicitly use an encoding that does 
> include perthousand (like WinAnsi) then the conversion to single-byte 
> encoding works.  For example, this works (for me at least) ...
> 
> pdf("WinAnsi_per_mille.pdf", encoding="WinAnsi")
> plot(1:10, ylab = "\u2030")
> dev.off()
> 
> Paul

Thanks for this, which works fine for me also.

All the best,

G

> 
> 
> > I've tried this in R 2.4.0 alpha [4] and R 2.5.0 to be [4] as my
> > self-compiled R 2.3.1-patched dies when plotting Unicode characters
> > (fixed in 2.4.0 alpha and above [3])
> > 
> > Can anyone point me in the right direction to get this working?
> > 
> > TIA,
> > 
> > G
> > 
> > [1] http://finzi.psych.upenn.edu/R/Rhelp02a/archive/48709.html
> > [2] like a "%" but with 2 circles at the bottom not one, see
> > http://en.wikipedia.org/wiki/Permille
> > [3] see thread at http://article.gmane.org/gmane.comp.lang.r.devel/9704
> > [4] R version 2.4.0 alpha (2006-09-19 r39410)
> > [5] R version 2.5.0 Under development (unstable) (2006-09-19 r39410)
> 
-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Gavin Simpson                 [t] +44 (0)20 7679 0522
 ECRC & ENSIS, UCL Geography,  [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



More information about the R-help mailing list