# [R] depth of labels of axis

Jinsong Zhao jszhao at yeah.net
Sat Sep 6 01:04:41 CEST 2014

```On 2014/9/4 12:24, David Winsemius wrote:
>
> On Sep 3, 2014, at 10:05 PM, Jinsong Zhao wrote:
>
>> On 2014/9/3 21:33, Jinsong Zhao wrote:
>>> On 2014/9/2 11:50, David L Carlson wrote:
>>>> The bottom of the expression is set by the lowest character (which can
>>>> even change for subscripted letters with descenders. The solution is
>>>> to get axis() to align the tops of the axis labels and move the line
>>>> up to reduce the space, e.g.
>>>>
>>>> plot(1:5, xaxt = "n")
>>>> axis(1, at = 1:5, labels = c(expression(E[g]), "E", expression(E[j]),
>>>> "E", expression(E[t])), padj=1, mgp=c(3, .1, 0))
>>>> # Check alignment
>>>> abline(h=.7, xpd=TRUE, lty=3)
>>>
>>> yes. In this situation, padj = 1 is the fast solution. However, If there
>>> are also superscript, then it's hard to alignment all the labels.
>>>
>>> If R provide a mechanism that aligns the label in axis() or text() with
>>> the baseline of the character without the super- and/or sub-script, that
>>> will be terrific.
>>
>> it seems that the above wish is on the Graphics TODO lists:
>> https://www.stat.auckland.ac.nz/~paul/R/graphicstodos.html
>>
>> Allow text adjustment for mathematical annotations which is relative to a text baseline (in addition to the current situation where adjustment is relative to the bounding box).
>>
>
> In many case adding a phantom argument will correct aliognment problems:
>
> plot(1:5, xaxt = "n")
> axis(1, at = 1:5, labels = c(expression(E[g]), E~phantom(E[g]), expression(E[j]),
> E~phantom(E[g]), expression(E[t])))
>
> abline(h=.7, xpd=TRUE, lty=3)
>
> Notice that c(expression(.), ...) will coerce all items separated by commas to expressions, sot you cna just put in "native" expression that are not surrounded by the `expression`-function
>
> c(expression(E[g]), E~phantom(E[g]), expression(E[j])  ) #returns
> # expression(E[g], E ~ phantom(E[g]), E[j])
>
> The tilde is actually a function that converts parse-able strings into R language objects:
>
> c(expression(E[g]), E~phantom(E[g]), ~E[j])
>

I never knew the trick of c(expression(.), ...). It simplifies my code a
lot.

Thanks a lot.

Best regards,
Jinsong

```