[R] Properly Parsing Pre-Superscripts & Displaying Them With grid.text

Prof Brian Ripley ripley at stats.ox.ac.uk
Sat Aug 2 22:59:01 CEST 2008


On Sat, 2 Aug 2008, Bryan Hanson wrote:

> Thanks Gavin, that nicely solved one problem.  On a fresh look at the
> archives, I see my other problem was trying to paste expressions, a bad
> idea.  So, I'm writing each line separately.  All problems are fixed!

You want a single expression containing an unevaluated call to paste. 
E.g.

xx <- expression(paste(phantom()^35 * Cl, ": 75%"))

I don't think trying to produce multi-line output from a single plotmath 
expression is a good idea (as it does not align on baselines).

> By the way, I discovered from the archives that to get a % in the final
> output, you have to quote it in the expression: "%" which I suppose is a
> general feature.  I may have missed it, but that behavior doesn't seem to be
> mentioned in the plotmath help page - perhaps it's too obvious?

% is not a valid character in a syntactic name, so you have to quote it 
(by ' " or `) to get it past the parser. That the expression has to 
syntactically valid in R is also why you need something before '^': {} 
will do as in

xx <- expression(paste({}^35 * Cl, `: 75%`))

The problem is parsing, nothing to do with plotmath (and hence one would 
not expect the details to be under ?plotmath).


>
> Thanks, Bryan
>
>
> On 8/2/08 2:19 PM, "Gavin Simpson" <gavin.simpson at ucl.ac.uk> wrote:
>
>> On Fri, 2008-08-01 at 17:23 -0400, Bryan Hanson wrote:
>>> Hi all... I¹m making a chart dealing with frequencies of isotopes of various
>>> elements.  For instance, I'd like the following text to appear on a chart
>>> with the "35" and "37" as superscripts:
>>>
>>> Based upon:
>>> 35Cl: 75%
>>> 37Cl: 25%
>>>
>>> I am having problems properly parsing the superscript that preceeds the
>>> "Cl", since there is no character ahead of the superscript (I saw examples
>>> in the archives where there was a preceeding character).  Also, the
>>> construction of the string seems to not be working as I expect either.  So,
>>> I think there are two problems here.  Here is a sample of what doesn't quite
>>> work:
>>
>> expression(phantom()^{35}*Cl[1])
>>
>> works if I understand what you want. phantom() is documented
>> on ?plotmath (?phantom is an alias for this help page also) and allows
>> you to leave space as though argument was there, but I use it here with
>> no object so no space left but this has the side effect of allowing the
>> superscript for this "space".
>>
>> Note that you need to wrap multiple character superscripts in {} ([] for
>> subscripts). Also, you need to produce a valid expression so the *
>> achieves this between the two components (the phantom()^{35} and the
>> Cl[1] bits). You could also achieve the same result by pasting the bits
>> together:
>>
>> expression(paste(phantom()^{35}, Cl[1]))
>>
>> but the former seems more familiar and intuitive to me now after
>> grappling with plotmath for a while.
>>
>> G
>>
>>>
>>> Cl1 <- rbinom(1000, size = 1, prob = 0.25)
>>> pCl1 <- histogram(Cl1, main = expression(Cl[1]), xlab = "", ylab = "",
>>> scales = list(draw = FALSE), ylim = c(0:80))
>>> plot(pCl1)
>>> # This works fine but doesn't have everything I want:
>>> leg.txt1 <- paste("Based upon:\n", ": 75%\n", ": 25%", sep = "")
>>> grid.text(leg.txt1, 0.5, 0.5)
>>> # This paste doesn't work due to the expression statements:
>>> leg.txt2 <- paste("Based upon:\n", expression(^35*Cl), ": 75%\n",
>>> expression(^37*Cl), ": 25%", sep = "")
>>> # This doesnt' produce an error, but doesn't produce what is wanted either,
>>> # as the expression is taken (almost) literally:
>>> leg.txt3 <- paste("Based upon:\n", expression(""^35*Cl), ": 75%\n",
>>> expression(""^37*Cl), ": 25%", sep = "")
>>> grid.text(leg.txt3, 0.5, 0.3)
>>>
>>>> From watching the help list, I know parsing things can be tricky.
>>>
>>> TIA, Bryan
>>>
>>>> sessionInfo()
>>> R version 2.7.1 (2008-06-23)
>>> i386-apple-darwin8.10.1
>>>
>>> locale:
>>> en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8
>>>
>>> attached base packages:
>>> [1] datasets  grid      grDevices graphics  stats     utils     methods
>>> [8] base
>>>
>>> other attached packages:
>>>  [1] fastICA_1.1-9         DescribeDisplay_0.1.3 ggplot_0.4.2
>>>  [4] RColorBrewer_1.0-2    reshape_0.8.0         MASS_7.2-42
>>>  [7] pcaPP_1.5             mvtnorm_0.9-0         hints_1.0.1-1
>>> [10] mvoutlier_1.3         robustbase_0.2-8      lattice_0.17-8
>>> [13] rggobi_2.1.9          RGtk2_2.12.5-3
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

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


More information about the R-help mailing list