[R] using a variable and a superscript in a legend

Peter Dalgaard pd@|gd @end|ng |rom gm@||@com
Sun Oct 20 19:31:00 CEST 2019


It's tricky, but I think what you want is

legend(list(x=0,y=100),
   legend=as.expression(list(
     "Sans renard",
     bquote(.(densren) * " ind."/"km"^2)
   )),
   lty=c(1,2),col=c("black","red"),bty="n")

Generally, if you want a vector of unevaluated expressions, you need an object of mode "expression", but you cannot create it directly with expression() because then the bquote() is left unevaluated:

> expression("Sans renard",bquote(.(densren) * " ind."/"km"^2))
expression("Sans renard", bquote(.(densren) * " ind."/"km"^2))

Putting the bquote on the outside _looks_ like it might work:

> bquote(expression("Sans renard",.(densren) * " ind."/"km"^2))
expression("Sans renard", 1.25 * " ind."/"km"^2)

but that is not an "expression" object, but a call to expression() (!). Try it and see.

Evaluating the call does actually work (notice that the printed value is exactly the same, but the object is not):

> eval(bquote(expression("Sans renard",.(densren) * " ind."/"km"^2)))
expression("Sans renard", 1.25 * " ind."/"km"^2)

but I think I prefer the as.expression(list(....)) construction.

An alternative tack is this:

> e <- expression(0,0)
> e[[1]] <- "sans renard"
> e[[2]] <- bquote(.(densren) * " ind."/"km"^2)
> plot(1:100,1:100,type="n")
> legend(list(x=0,y=100),legend=e, lty=c(1,2),col=c("black","red"),bty="n")



> On 20 Oct 2019, at 18:02 , Patrick Giraudoux <patrick.giraudoux using univ-fcomte.fr> wrote:
> 
> Thanks Bert and Peter,
> 
> Yes Bert, I was aware of the legend() function syntax, and just quoting the legend argument within the function. 
> 
> However, Bert and Peter, I do not understand why it works with your absolutely reproducible examples and not in the slightly (not so slightly apparently) different context where I used it...
> 
> densren=1.25
> plot(1:100,1:100,type="n")
> legend(list(x=0,y=100),legend=c("Sans renard",bquote(.(densren) (ind./km)^2)),lty=c(1,2),col=c("black","red"),bty="n")
> 
> densren=1.25
> plot(1:100,1:100,type="n")
> legend(list(x=0,y=100),legend=c("Sans renard",bquote(.(densren) * " ind."/"km"^2)),lty=c(1,2),col=c("black","red"),bty="n"
> 
> Probably because the result of bquote() is concatenated in a character vector, but how to deal with this ?
> 
> Best,
> 
> Patrick
> 
> 
> 
> Le 20/10/2019 à 16:42, Bert Gunter a écrit :
>> Assuming you are using base graphics, your syntax for adding the legend appears to be wrong.
>> legend() is a separate function, not a parameter of plot.default afaics.
>> 
>> The following works for me:
>> 
>> > densren <- 1.25
>> > plot(1:10)
>> > legend (x="center", legend =bquote(.(densren) (ind./km)^2))
>> 
>> See ?legend
>> 
>> Bert Gunter
>> 
>> "The trouble with having an open mind is that people keep coming along and sticking things into it."
>> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>> 
>> 
>> On Sun, Oct 20, 2019 at 5:30 AM Patrick Giraudoux <patrick.giraudoux using univ-fcomte.fr> wrote:
>> Dear listers,
>> 
>> I am trying to pass an expression inlcuding a variable and a 
>> superpscript to a legend. What I want to obtain is e.g. with densren = 1.25
>> 
>> 1.25 ind./km^2
>> 
>> I have tried many variants of the following:
>> 
>> legend=bquote(.(densren) (ind./km)^2)
>> 
>> but if not errors, do obtain
>> 
>> 1.25 (ind./km^2)
>> 
>> hence not what I want (no parenthesis, 2 in superscript...)
>> 
>> Any idea about a correct syntax to get what I need ?
>> 
>> Best,
>> 
>> Patrick
>> 
>> 
>>         [[alternative HTML version deleted]]
>> 
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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.
> 
> 

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes using cbs.dk  Priv: PDalgd using gmail.com



More information about the R-help mailing list