Search code examples
rplotsuperscriptplotmath

Special characters and superscripts on plot axis titles


I am trying to make a y-axis title with both a special character and a superscript. I am able to do this, but I want the closing parentheses not to be superscripted. And that's what I'm having a problem with. I think its just a placing of my parenthesis, but I've tried (seemingly) everything.

plot(WatexCl, ConcuM, col = as.numeric(1), pch = as.numeric(Depth), 
   xlab = expression(paste("Concentration Cl  ( ", mu, "moles/g dry wt)")), 
   ylab = expression(paste("Average Conc of S- on plates ( ", mu, "Moles/cm"^"2"),)), 
   data = plates)

Solution

  • The one thing that often users fail to grasp is that you invariably don't need to quote strings and paste them together when used in an expression for a plot label. It is usually simpler to use the layout tools directly (e.g. ~ and *). For example:

    df <- data.frame(y = rnorm(100), x = rnorm(100))
    
    plot(y ~ x, data = df,
         ylab = expression(Average ~ Conc ~ of ~ S- ~ on ~ plates ~ 
                           (mu ~ Moles ~ cm^{-2} ~ dry ~ wt)),
         xlab = expression(Concentration ~ Cl ~ (mu ~ moles ~ g^{-1} ~ dry ~ wt)))
    

    Alternatively, you can include strings for longer sections of text; in this case it is arguably easier to do:

    plot(y ~ x, data = df,
         ylab = expression("Average Conc of S- on plates" ~
                             (mu ~ moles ~ cm^{-2} ~ "dry wt")),
         xlab = expression("Concentration Cl" ~ (mu ~ moles ~ g^{-1} ~ "dry wt")))
    

    but note there is no need to paste strings and other features here.

    Both produce:

    enter image description here

    Note the issue plotmath has with the superscript 2. You may wish to add some extra space for the y-axis margin to accommodate that:

    op <- par(mar = c(5,4.5,4,2) + 0.1)
    plot(y ~ x, data = df,
         ylab = expression("Average Conc of S- on plates" ~
                              (mu ~ moles ~ cm^{-2} ~ "dry wt")),
         xlab = expression("Concentration Cl" ~ (mu ~ moles ~ g^{-1} ~ "dry wt")))
    par(op)
    

    producing

    enter image description here