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.giraud...@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.giraud...@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.giraud...@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@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]] ______________________________________________ R-help@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.