Re: [R] Question about 'text' (add lm summary to a plot)

From: Marc Schwartz (via MN) <mschwartz_at_mn.rr.com>
Date: Sat 23 Jul 2005 - 06:28:58 EST

Ok guys,

So I played around with this a bit, going back to Dan's original requirements and using Thomas' do.call() approach with legend(). Gabor's approach using sapply() will also work here. I have the following:

# Note the leading spaces here for alignment in the table # This could be automated with formatC() or sprintf()

my.slope.1 <-  "  3.22"
my.slope.2 <-  "0.13"
my.inter.1 <-  "-10.66"
my.inter.2 <-  "1.96"
my.Rsqua <-    "  0.97"

plot(1:5)

L <- list("Intercept:",

          "Slope:",
          bquote(paste(R^2, ":")),
          bquote(.(my.inter.1) %+-% .(my.inter.2)),
          bquote(.(my.slope.1) %+-% .(my.slope.2)),
          bquote(.(my.Rsqua)))

par(family = "mono")

legend("topleft", legend = do.call("expression", L), ncol = 2)

Note however, that while using the mono font helps with vertical alignment of numbers, the +/- sign still comes out in the default font, which is bold[er] than the text.

If one uses the default font, which is variable spaced, it is problematic to get the proper alignment for the numbers. I even tried using phantom(), but that didn't quite get it, since the spacing is variable, as opposed to LaTeX's mono numeric spacing with default fonts.

Also, note that I am only using two columns, rather than three, since trying to place the ":" as a middle column results in spacing that is too wide, given that the text.width argument is a scalar and is set to the maximum width of the character vectors.

Note also that even with mono spaced fonts, the exponent in R^2 is still horizontally smaller than the other characters. Thus, spacing on that line may also be affected depending upon what else one might attempt.

Not sure where else to go from here.

HTH, Marc Schwartz

On Fri, 2005-07-22 at 14:01 -0400, Gabor Grothendieck wrote:
> You are right. One would have to use do.call as you did
> or the sapply method of one of my previous posts:
>
> a <- 7
> plot(1)
> L <- list(bquote(alpha==.(a)),bquote(alpha^2+1==.(a^2+1)))
> legend("topleft",legend=sapply(L, as.expression))
>
>
> On 7/22/05, Thomas Lumley <tlumley@u.washington.edu> wrote:
> > On Fri, 22 Jul 2005, Gabor Grothendieck wrote:
> > >
> > > I think legend accepts a list argument directly so that could be
> > > simplified to just:
> > >
> > > a<-7
> > > plot(1)
> > > L <- list(bquote(alpha==.(a)),bquote(alpha^2+1==.(a^2+1)))
> > > legend("topleft",legend=L)
> >
> > Except that it wouldn't then work: the mathematical stuff comes out as
> > text.
> >
> > > The same comment seems to apply to my prior suggestion about
> > > as.expression(bquote(...)), namely that one can just write the
> > > following as text also supports a list argument:
> >
> > And this doesn't work either: you end up with %+-% rather than the
> > plus-or-minus symbol.
> >
> > The reason I gave the do.call() version is that I had tried these simpler
> > versions and they didn't work.
> >
> > -thomas
> >



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Sat Jul 23 06:36:09 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:33:57 EST