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

Bert Gunter bgunter@4567 @end|ng |rom gm@||@com
Sun Oct 20 20:28:49 CEST 2019


To continue down this rabbit hole ...

Actually, both solutions are the same; Peter's is just more general than
mine, as it works more conveniently for more lines in the legend.

However, note that:

> class(c("Sans renard", bquote(.(densren) (ind./km)^2)))
[1] "list"  # by coercion

so it does not seem necessary to explicitly call list(). That is:

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

appears to suffice. I would appreciate correction if I'm wrong about this.

Cheers,
Bert



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 11:01 AM Patrick Giraudoux <
patrick.giraudoux using univ-fcomte.fr> wrote:

> Now, we have two solutions working. This is great since I did not find
> any example of the kind searching r-help archives and google...
> Thanks !
>
> Le 20/10/2019 à 19:31, Peter Dalgaard a écrit :
> > 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.
> >>
>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list