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.


______________________________________________
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.

Reply via email to