[R] difficulty with R expressions in text/legend

David Winsemius dwinsemius at comcast.net
Sun Jul 11 05:54:01 CEST 2010


On Jul 10, 2010, at 11:22 PM, David Winsemius wrote:

>
> On Jul 10, 2010, at 10:45 PM, David Winsemius wrote:
>
>>
>> On Jul 10, 2010, at 8:58 PM, Murat Tasan wrote:
>>
>>> hi, i'm trying to prepend some plain (i.e. unevalutated) text to a
>>> typographically evaluated R expression in a legend(...) call.
>>>
>>> here's a working legend(...) call that is close to what i'd like
>>> (where x and y are returned from an lm(...) call):
>>>
>>> legend("topleft", legend = c(bquote(R^2 == .(summary(x)$r.squared)),
>>> bquote(R^2 == .(summary(y)$r.squared))), fill = c("blue", "red"))
>>>
>>> this evaluates the R^2 values for my x and y objects, then displays
>>> them in the plot legend with colored boxes adjacent to them.
>>>
>>> now the hard part (for me, at least :-/), i'd like to add some text
>>> (e.g. "data set 1" and "data set 2") to each line of the legend,  
>>> right
>>> before the typographically-displayed R^2 == some_value text.
>>
>> Would be nice (and would follow the guidance of the Posting Guide  
>> if you were to offer a method for construction something like "x"  
>> and "y" as well as stating explicitly what plotting function you  
>> were using. My guess (untested) is that you can get what you want  
>> by simply sticking in those strings (unquoted) into your "working"  
>> bquote argument.
>>
>> legend("topleft", legend = c(bquote(data set 1 R^2 == .(summary(x) 
>> $r.squared)),
>> bquote(data set 2 R^2 == .(summary(y)$r.squared))), fill =  
>> c("blue", "red"))
>
> Nah. didn't work with an example constructed from the lm and summary  
> page examples.
>
> e1 <- as.expression(paste("data set 1 R^2 == ",  
> summary(lm.D90)$r.squared))
> e2 <- as.expression(paste("data set 2 R^2 == ",  
> summary(lm.D90)$r.squared ))
> plot(1,1)
> legend("topleft", legend = c( e1,e2 ), fill = c("blue", "red"))
>
> This was mostly successful, although it did not get the ^2  
> interpreted as a superscript. You may want to wrap an sprintf or a  
> format call around that r.squared.

I searched for better methods and found a thread where I had  
demonstrated some success, but the code was rather convolute. Others  
had more compact solutions. Try this modification of one offered by  
Grothendieck:

x=c(summary(lm.D90)$r.squared, summary(lm.D90)$r.squared-1)
plot(0)
ix <- as.double(1:3)
legend("top",  as.expression(lapply(ix, function(i) bquote(data~set~. 
(i)~R^2==.(x[i])))))

-- 
David,
>
>>
>> -- 
>> David.
>>
>>>
>>> basically, a legend that looks like so (with the expression part
>>> evaluated and typed out correctly):
>>> data set 1 R^2 == some_value
>>> data set 2 R^2 == some_other_value
>>>
>>> i've tried a seemingly countless number of paste/substitute/ 
>>> expression
>>> combinations, but cannot seem to get what i'd like.
>>> anyone know of a nice call to create these two strings to display on
>>> my plot?
>>>
>>> thanks for any help!
>>>
>>> -murat
>>>
>>> ______________________________________________
>>> 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
>>
>> ______________________________________________
>> 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
>

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list