Andreas Svensson
2006-Aug-14 13:57 UTC
[R] mtext uses the typographical descender to align text
<> Hello One sometimes (quite often really ) marvel at the choice of defaults in R's graphic engine. For some obscure reason, mtext uses the typographical descender (bottom of letters) to align text. That is: "gG" will end up slightly higher that "GG". Depending on the font, "Q" might end up higher than "O". (for explanation of baseline & descender see: http://www.paratype.com/help/term/terms.asp?code=88) Example: y1 <- rnorm(30) y2 <- rnorm(30) group <- as.factor(rep(1:6, each=10)) y <- c(y1,y2) testdata <- data.frame(group, y) plot (y ~group, axes=F, xlab="why does R align the BOTTOM of the letters???" ) box() mtext(expression(italic("Normal 1")) ,1 , line=1, at=1) mtext(expression(italic("Higher 1 ")) ,1 , line=1, at=2) mtext(expression(italic("Normal 3 ")) ,1 , line=1, at=3) mtext(expression(italic("Higher 2 ")) ,1 , line=1, at=4) mtext(expression(italic("Normal 3 ")) ,1 , line=1, at=5) mtext(expression(italic("Higher 3 ")) ,1 , line=1, at=6) As the word "Higher" includes a descending letter (g), this factor name ends up higher. I must say I have never encountered a software that uses the typographical descender instead of the baseline to align text . Does anyone know how to make R use the baseline instead? Perhaps using adj or padj? Or do I have to do something silly as adding "g", col=white to each mtext-line to trick R into aligning the names. Cheers Andreas
Peter Dalgaard
2006-Aug-14 14:33 UTC
[R] mtext uses the typographical descender to align text
Andreas Svensson <andreas.svensson at bio.ntnu.no> writes:> <> > > Hello > > One sometimes (quite often really ) marvel at the choice of defaults in > R's graphic engine. > For some obscure reason, mtext uses the typographical descender (bottom > of letters) to align text. That is: "gG" will end up slightly higher > that "GG". Depending on the font, "Q" might end up higher than "O". > > (for explanation of baseline & descender see: > http://www.paratype.com/help/term/terms.asp?code=88)<snip>> mtext(expression(italic("Normal 1")) ,1 , line=1, at=1)<snap>> As the word "Higher" includes a descending letter (g), this factor name > ends up higher. > I must say I have never encountered a software that uses the > typographical descender instead of the baseline to align text . > > Does anyone know how to make R use the baseline instead? Perhaps using > adj or padj? Or do I have to do something silly as adding > "g", col=white > to each mtext-line to trick R into aligning the names.Notice that it only happens when plotting math expressions. Using mtext("Normal 1" ,1 , line=1, at=1,font=3) mtext("Higher 1 " ,1 , line=1, at=2, font=3) etc. does not exhibit the same effect. I suppose the idea is that math expressions can grow arbitrarily tall or deep, and that the design decision (wise or not) has been to align on the bounding box of the whole enchilada. For a workaround, if you do need to do it with expressions, notice the phantom() construction. -- O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907