[R] Plotmath bug or my misunderstanding?

David Winsemius dwinsemius at comcast.net
Sun May 13 18:45:15 CEST 2012


On May 13, 2012, at 10:43 AM, Bert Gunter wrote:

> Peter/David:
>
> 1. For some reason, I didn't see Peter's reply on r-help.
>
> 2. To Peter: Aha!!
> Let me play this back to you. In
>
> text(1,1,labels=expression(atop(atop(sigma,"some text"),"another
> level")),cex = 2)
>
> The (outer) whole atop() specification is allocated twice the amount
> of space that would be required for the current font size, cex =1.
> Then each of the top and bottom is allocated the amount of space
> needed within this cex = 2 space. For the inner atop to fit within
> that allocated amount of space, its top and bottom must get smaller,
> of course. N'est-ce pas?
>
> This makes sense to me!  My misunderstanding is thinking that cex
> applied to the individual text components, not the entire expression.
> Enlightenment much appreciated.
>
> 3. However, this now begs the question of how to keep all text and
> symbols the same size, which is really what the OP really wanted (a
> way to emulate multiple lines). I'll fool around with this to see what
> I come up with now that I'm enlightened -- or see if you or David come
> up with something clever.

Any cleverness I exhibit on these pages is generally ascribable to my  
R-betters. When faced with a request like this, I just fire up Google  
and generally find an answer from Lumley, Grothendieck, Ligges, or in  
this case, Schwartz (from an rhelp post in 2009). This was the first  
hit that wasn't a link to R documentation with a search on "multiple  
lines expression plotmath r"

# values to pull from using bquote
  X= 2.3
Y= 5.6
txtList <- list("Line # 1",
      "Longer line #2",
       bquote(X == .(X)),
      "and",
       bquote(The~value~of~Y == .(Y)))

plot(1,type="n", xaxt='n', yaxt='n', ann=FALSE)
text(1.2, seq(1.2, 1.1, len=5) , labels=do.call(expression, txtList))

I think this is a fairly generally strategy but I'm certainly willing  
to take a crack at further modifications if desired.

-- 
david.

>
>
> Cheers,
> Bert
>
>
>
> On Sat, May 12, 2012 at 9:27 PM, David Winsemius <dwinsemius at comcast.net 
> > wrote:
>>
>> On May 12, 2012, at 6:27 PM, Peter Ehlers wrote:
>>
>>> Hi Bert,
>>>
>>> I think the 'cex=' argument applies to the outermost 'atop()'.
>>> It then applies that size specification to each of the two
>>> components of the atop(a,b). If one of the components is itself
>>> another atop(a,b), then the individual parts are sized downward
>>> to produce the required cex for the unit.
>>>
>>> As for the 'cex=1:2' specification, only the first value is used.
>>
>>
>> Isn't there also a 0.67 factor being applied to whatever was the  
>> "outside"
>> size prior to being used for the atop arguments? So the inner atop  
>> arguments
>> get that applied twice if I understand correctly.
>>
>> text(1,1,labels=expression(atop(
>>               atop("top level one", "top level two"),
>>               "another level")
>>     ) )
>>
>>
>> I did notice that the cr-linefeed (perhaps unintentionally being  
>> inserted by
>> a mail client) seemed to be "working" at least on my Mac :
>>
>> plot(1,1)
>> text(1,1,labels=expression("another
>> level")
>>     )
>>
>> Whereas it is well known that "\n" will appear as two characters,  
>> \n, and
>> not be interpreted as a special.
>> --
>> David
>>>
>>>
>>> Cheers,
>>> Peter Ehlers
>>>
>>> On 2012-05-12 14:05, Bert Gunter wrote:
>>>>
>>>> This is a followup to a recent post on using atop() to obtain
>>>> multiline expressions.
>>>>
>>>> My reading of the plotmath docs makes it clear that issuing (in  
>>>> base
>>>> graphics) the specification
>>>>
>>>> par(cex = 2)
>>>>
>>>> doubles symbols and regular text in subsequent plotmath  
>>>> expressions.
>>>> However, it is unclear to me what specifying cex _within_ the
>>>> annotation function using plotmath should do, and the following  
>>>> seems
>>>> to want to have it both ways: ignore/obey )or maybe recycle?)
>>>>
>>>> plot(1,type="n", xaxt='n', yaxt='n', ann=FALSE)
>>>>  text(1,1,labels=expression(atop(sigma,"some text")),cex = 2)
>>>> ## obeys the cex specification in symbols and text
>>>>
>>>> HOWEVER
>>>>
>>>> plot(1,type="n", xaxt='n', yaxt='n', ann=FALSE)
>>>>  text(1,1,labels=expression(atop(atop(sigma,"some text"),"another
>>>> level")),cex = 2)
>>>> ## ???
>>>>
>>>> For even more fun, try:
>>>>
>>>> plot(1,type="n", xaxt='n', yaxt='n', ann=FALSE)
>>>>  text(1,1,labels=expression(atop(atop(sigma,"some text"),"another  
>>>> level")),cex = 1:2)
>>>> ##????
>>>>
>>>> So I confess to being flummoxed. Enlightenment would be much  
>>>> appreciated.
>>>>
>>>> Cheers,
>>>> Bert
>>>>
>>>>
>>>>
>>>>
>>>
>>> ______________________________________________
>>> 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
>>
>
>
>
> -- 
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
>
> Internal Contact Info:
> Phone: 467-7374
> Website:
> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list