[R] depth of labels of axis

David L Carlson dcarlson at tamu.edu
Thu Sep 4 23:58:16 CEST 2014

The problem with this approach is that the horizontal positioning of the labels is based on the width of the label including the phantom part so that the E's are pushed to the left of the tick mark (at least on my Windows machine). But it does provide a way of dealing with superscripts as long as the phantom is added to each label and hadj= is used to position the label horizontally, eg (changing the last label to a superscript for illustration):

lbl <- expression(E[g]~phantom(E[g]), E~phantom(E[g]), E[j]~phantom(E[g]),
       E~phantom(E[g]), E^t~phantom(E[g]))
plot(1:5, xaxt = "n")
axis(1, at = 1:5, labels = lbl, hadj=.1)
abline(h=.7, xpd=TRUE, lty=3)

David C

-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of David Winsemius
Sent: Thursday, September 4, 2014 2:25 PM
To: Jinsong Zhao
Cc: r-help at r-project.org
Subject: Re: [R] depth of labels of axis

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])


>>> -----Original Message-----
>>> From: r-help-bounces at r-project.org
>>> [mailto:r-help-bounces at r-project.org] On Behalf Of Jinsong Zhao
>>> Sent: Monday, September 1, 2014 6:41 PM
>>> To: r-help at r-project.org
>>> Subject: [R] depth of labels of axis
>>> Hi there,
>>> With the following code,
>>> plot(1:5, xaxt = "n")
>>> axis(1, at = 1:5, labels = c(expression(E[g]), "E", expression(E[j]),
>>> "E", expression(E[t])))
>>> you may notice that the "E" within labels of axis(1) are not at the same
>>> depth. So the vision of axis(1) labels is something like wave.
>>> Is there a possible way to typeset the labels so that they are have the
>>> same depth?
>>> Any suggestions will be really appreciated. Thanks in advance.
>>> Best regards,
>>> Jinsong

David Winsemius
Alameda, CA, USA

R-help at r-project.org mailing list
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

More information about the R-help mailing list