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

Gavin Simpson gavin.simpson at ucl.ac.uk
Sat Aug 2 20:19:43 CEST 2008


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.



More information about the R-help mailing list