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

David Winsemius dwinsemius at comcast.net
Tue Apr 5 03:03:14 CEST 2011


On Apr 4, 2011, at 8:42 PM, David Scott wrote:

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

I did. Your theory seems supported by the experimental evidence:

lab <- bquote(paste(alpha==1, ", ", beta==2))
xyplot(0 ~ 0, xlab = as.expression(bquote(atop(.(lab), bold(foo) ) )))

# Works!

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

Right. It does seem as though we should need to be deducing the inner  
workings of the subatomic particles by throwing text at the  
interpreter though.

-- 

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list