Greek letters in legend in R

17,367

The better, looped answer comes from here and user20650.

Solution with sapply

The expression function is quite tricky but in conjunction with substitute you can use sapply to loop:

curve(sin(x), from = 1, to = 3, lty = 1, ylim = c(-1, 1))
curve(sin(2 * x), add = TRUE, lty = 2)    
curve(sin(3 * x), add = TRUE, lty = 3)
legend("topright",
       legend = sapply(1:3, function(x) as.expression(substitute(alpha == B,
                                                                 list(B = as.name(x))))),
       lty = 1:3)

Simple Fix

curve(sin(x), from = 1, to = 3, lty = 1, ylim = c(-1, 1))
curve(sin(2 * x), add = TRUE, lty = 2)    
curve(sin(3 * x), add = TRUE, lty = 3)
legend("topright", legend = c(expression(paste(alpha, " = ", 1)),
                              expression(paste(alpha, " = ", 2)),
                              expression(paste(alpha, " = ", 3))), lty = 1:3)
Share:
17,367
JACKY88
Author by

JACKY88

I am JACKY.

Updated on June 25, 2022

Comments

  • JACKY88
    JACKY88 almost 2 years

    I want to have three curves on the same plot with different parameter alpha.

    curve(sin(x), from = 1, to = 3, lty = 1, ylim = c(-1, 1))
    curve(sin(2 * x), add = TRUE, lty = 2)    
    curve(sin(3 * x), add = TRUE, lty = 3)
    legend("topright", legend = expression(paste(alpha, " = ", c(1, 2, 3))), lty = 1:3)
    

    In the legend, I want to have three lines with alplha = 1, alpha = 2, alpha = 3. How do I make it correct? enter image description here

  • JACKY88
    JACKY88 almost 9 years
    Is it possible to do this in a more automatic way? My real plot has more lines and I have a lot of these plots.
  • MrFlick
    MrFlick almost 9 years
    I prefer legend("topright", legend = as.expression(lapply(1:3, function(x) bquote(alpha==.(x)))), lty = 1:3)