Line break in expression()?

Jen Bohold picture Jen Bohold · Aug 14, 2013 · Viewed 22.3k times · Source

I have the following histogram in R:

hist(
  alpha, cex.main=2, cex.axis=1.2, cex.lab=1.2,
  main=expression(
    paste("Histogram of ", hat(mu), ", Bootstrap samples, Allianz")
  )
)

The title is too long, so I want a line break. According to this thread I tried

hist(
  alpha, cex.main=2, cex.axis=1.2, cex.lab=1.2,
  main=expression(
    paste("Histogram of ", hat(mu), ",cat("\n") Bootstrap samples, Allianz")
  )
)

or

hist(
  alpha, cex.main=2, cex.axis=1.2, cex.lab=1.2,
  main=expression(
    paste("Histogram of ",hat(mu), cat("\n"),", Bootstrap samples, Allianz")
  )
)

But both do not work, how can I get a line break in paste()?

Answer

IRTFM picture IRTFM · Aug 14, 2013

You can easily use line breaks in regular paste, but this is plotmath paste (actually a different function also with no 'sep' argument) and the (long) ?plotmath page specifically tells you it cannot be done. So what's the work-around? Using the plotmath function atop is one simple option:

expression(atop("Histogram of "*hat(mu), Bootstrap~samples*','~Allianz))

This will break at the comma and center the plotmath expressions. More complicated options are available.

This illustrates plotting to a graphics file. Ironically, the first effort gave me a display that did have your problem with the 'hat' (are those circumflexes?) being cut off and this shows how to increase the margins. The top margin is probably the third number so c(3,3,8,0) might suit you better:

 pdf("test.pdf") ;  par(mar=c(10,10,10,10))
 hist(1:10,cex.main=2,cex.axis=1.2,cex.lab=1.2,
 main=expression(atop("Histogram of "*hat(mu), 
                       Bootstrap~samples * ',' ~Allianz)))
 dev.off() # don't need to restore;  this 'par' only applies to pdf()