[R] depth of labels of axis

Jinsong Zhao jszhao at yeah.net
Sat Sep 6 01:15:54 CEST 2014


On 2014/9/4 14:58, David L Carlson wrote:
> 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

Yes, it works well. However, we have to adjust the hadj with our eyes.

I hope the TODO wish can be implemented in the nearly future.

Thanks a lot.

Best regards,
Jinsong


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



More information about the R-help mailing list