Ed Merkle
2006-Feb-20 16:11 UTC
[R] Plots: displaying mathematical symbols in specific fonts
Dear SavioRs, I am doing some research where characters in different microsoft fonts serve as experimental stimuli. Hence, in plot labels, I would like to display the characters in specific microsoft fonts. I have figured out how to display letters and numbers, but I am having trouble with symbols such as capital delta. Before I go further, I am using R 2.2.1 on Windows XP with everything in English. I am trying to save my plot as a windows metafile. To display different characters in verdana, for example, I first edit the Rdevga file so that it contains verdana. I can then get verdana letters and numbers on the plot using a text() command. Things within an expression() command, however, are not displayed in the desired font. For example, windows() plot(rnorm(15),rnorm(15)) text(0,0,expression(Delta),font=10) displays a capital delta, but it is not in font #10 within Rdevga. I can get characters that have one of the first 255 ascii codes using chars8bit() in the sfsmisc package. One example is the division sign: text(0,0.2,chars8bit(247),font=10) I have not been able to display other symbols in microsoft fonts, however. Is this possible to do in R? All replies are appreciated. -- Ed Merkle, PhD Department of Psychology Wichita State University Wichita, KS
Prof Brian Ripley
2006-Feb-20 17:53 UTC
[R] Plots: displaying mathematical symbols in specific fonts
On Mon, 20 Feb 2006, Ed Merkle wrote:> Dear SavioRs, > > I am doing some research where characters in different microsoft > fonts serve as experimental stimuli. Hence, in plot labels, I would > like to display the characters in specific microsoft fonts. I have > figured out how to display letters and numbers, but I am having > trouble with symbols such as capital delta. Before I go further, I > am using R 2.2.1 on Windows XP with everything in English. I am > trying to save my plot as a windows metafile. > > To display different characters in verdana, for example, I first edit > the Rdevga file so that it contains verdana. I can then get verdana > letters and numbers on the plot using a text() command. Things > within an expression() command, however, are not displayed in the > desired font. For example,No, they are *always* displayed in font 5, as the Rdevga file actually says. Verdana is not a mathematical font, and what you are looking for is the Greek letter Delta, not the mathematical symbol.> windows() > plot(rnorm(15),rnorm(15)) > text(0,0,expression(Delta),font=10) > > displays a capital delta, but it is not in font #10 within Rdevga. I > can get characters that have one of the first 255 ascii codesHmm, there are only 128 ASCII codes. I guess you mean you are in CP1252 aka WinAnsi, the Windows approximation to ISO Latin-1, and so can only access the (somewhat less than) 256 glyphs of that charset.> using > chars8bit() in the sfsmisc package. One example is the division sign: > > text(0,0.2,chars8bit(247),font=10)You don't need that: the standard octal and hex escapes work. But if you want to draw symbols you should probably be using points() and pch=. E.g. points(0, 0.2, font=10, pch=247)> I have not been able to display other symbols in microsoft fonts, > however. Is this possible to do in R? All replies are appreciated.Yes, but only by switching to a Greek locale. For example Sys.setlocale("LC_CTYPE", "greek") plot(1:10) text(8,2, "\xC4", font=10) and that only on an NT-based version of Windows and the R-devel version of R. It's easier on Unix-alikes in a UTF-8 locale, as then you can use Unicode escapes like \u0394. But Windows does not have UTF-8 locales (although one day R may fake them -- actually internally it already can but there is no I/O support). There you could also do text(8, 2, "\u0394") points(5, 7, font=4, pch=0x0394) at least if you have fonts which support Greek. -- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595