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

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


On Apr 4, 2011, at 9:03 PM, David Winsemius wrote:

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

Perhaps here:
http://finzi.psych.upenn.edu/Rhelp10/2010-August/250832.html

Or here:
http://finzi.psych.upenn.edu/Rhelp10/2009-July/203714.html

Although I disagree with Heimstra that reading the help(bquote)  
provides "more details" that might shed light on why this is so.

-- 
David.


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

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list