Search code examples
rplotlegendplotmath

multiple bquote items in legend of an R plot


Following works, (copy & paste into R)

a=123
plot(1,1)
legend('bottomleft',legend=bquote(theta == .(a)))

I want to have multiple items in the legend. All with greek letters. As a simple example, if I repeat the item twice the code does not work anymore

a=123
plot(1,1)
legend('bottomleft',legend=c(bquote(theta == .(a)),bquote(theta == .(a))))

I have tried many more complicated expressions but they all did not work.

Any help will be appreciated.


Solution

  • In this case, plotmath is not able to coerce the list of calls to expressions.

    > cs <- c(bquote(theta == .(a)),bquote(theta == .(a)))
    > cs
    [[1]]
    theta == 123
    
    [[2]]
    theta == 123
    
    > sapply(cs, class)
    [1] "call" "call"
    

    You can make this work if you coerce to expressions yourself:

    > c(as.expression(bquote(theta == .(a))), as.expression(bquote(theta == .(a))))
    expression(theta == 123, theta == 123)
    > plot(1,1)
    > legend('bottomleft',legend= c(as.expression(bquote(theta == .(a))), 
    +                               as.expression(bquote(theta == .(a)))))
    

    Another way is to coerce the original list of calls to expressions using sapply:

    plot(1,1)
    legend("bottomleft", 
           sapply(c(bquote(theta == .(a)), bquote(theta == .(a))), as.expression))