[R] lattice: how to "center" a subtitle?

David Scott d.scott at auckland.ac.nz
Tue Apr 5 02:42:00 CEST 2011


  On 05/04/11 05:58, David Winsemius wrote:
> On Apr 4, 2011, at 1:27 PM, Marius Hofert wrote:
>
>> Dear David,
>>
>> do you know how to get plotmath-like symbols in both rows?
>> I tried s.th. like:
>>
>> lab<- expression(paste(alpha==1, ", ", beta==2, sep=""))
>> xlab<- substitute(expression( atop(lab==lab., bold(foo)) ),
>> list(lab.=lab))
>> xyplot(0 ~ 0, xlab = xlab)
> I _did_ have plotmath functions in both rows: But here is your solution:
>
> xyplot(0 ~ 0,  xlab =
>       expression( atop(paste(alpha==1, "   ", beta==2), bold(bla) )) )
>         )
>
> Note that `paste` in plotmath is different than `paste` in regular R.
> It has no `sep` argument. I did try both substitute and bquote on you
> externally expression,  but lattice seems to be doing some non-
> standard evaluation and I never got it to "work". Using what I thought
> _should_ work, does work with `plot`:
>
>   >  x=1;y=2
>   >  plot(0 ~ 0, xlab = bquote( atop(alpha==.(x)*","~beta==.(y),
> bold(foo) ) )
> + )
>
> But the same expression throws an error with xyplot:
>   >  x=1;y=2
>   >  xyplot(0 ~ 0, xlab = bquote( atop(alpha==.(x)*","~beta==.(y),
> bold(foo) ) )
> + )
> Error in trellis.skeleton(formula = 0 ~ 0, cond = list(1L), aspect =
> "fill",  :
>     could not find function "atop"
>
I am not sure where I read it and I can't find it again, but my 
understanding is that expressions using bquote with lattice need to be 
enclosed in as.expression() to work. That is in contrast to what happens 
in base graphics.

Here is a simple example.

a <- 2
plot(1:10, a*(1:10), main = bquote(alpha == .(a)))
require(lattice)
xyplot(a*(1:10)~ 1:10, main = bquote(alpha == .(a)))
xyplot(a*(1:10)~ 1:10, main = as.expression(bquote(alpha == .(a))))

Which produces:

 > a <- 2
 > plot(1:10, a*(1:10), main = bquote(alpha == .(a)))
 > require(lattice)
Loading required package: lattice
 > xyplot(a*(1:10)~ 1:10, main = bquote(alpha == .(a)))
Error in trellis.skeleton(formula = a * (1:10) ~ 1:10, cond = list(c(1L,  :
   object 'alpha' not found
 > xyplot(a*(1:10)~ 1:10, main = as.expression(bquote(alpha == .(a))))

Using expression() rather than as.expression() doesn't produce the 
desired affect. Try it yourself.

As to why this is the case .....

David Scott

-- 
_________________________________________________________________
David Scott	Department of Statistics
		The University of Auckland, PB 92019
		Auckland 1142,    NEW ZEALAND
Phone: +64 9 923 5055, or +64 9 373 7599 ext 85055
Email:	d.scott at auckland.ac.nz,  Fax: +64 9 373 7018

Director of Consulting, Department of Statistics



More information about the R-help mailing list