How can I create legend labels containing multiple lines of text followed by a mathematical expression on a separate line, avoiding the problems listed below?
The accepted answer here doesn't work for legends, and as far as I can tell, the alternate answer involving bquote doesn't work for my case either, as illustrated below.
Reproducible code:
# multiple lines in first legend label are not horizontally aligned
# also, entire legend label is not vertically aligned with box
plot( runif(10), runif(10) )
legend( x='top', fill=grey.colors(2), bty='n', ncol=2, inset=.1,
legend=c( expression( "Hello world\nGoodbye world\n" ~ 64 %/% 8 %/% 8 ),
'something else' ) )
# both above problems fixed, but math expression doesn't display right
plot( runif(10), runif(10) )
legend( x='top', fill=grey.colors(2), bty='n', ncol=2, inset=.1,
legend=c( paste( "Hello world\nGoodbye world\n", expression( 64 %/% 8 %/% 8 ) ),
'something else' ) )
# nested atops within bquote almost works in title, but font size is not uniform
# does not work at all in legend, anyway
plot( runif(10), runif(10) )
label1 = bquote( atop( atop( "Hello world", "Goodbye world" ), 64 %/% 8 %/% 8 ) )
labels = c( label1, 'something else' )
title( label1 )
legend( x='top', fill=grey.colors(2), bty='n', ncol=2, inset=.1, legend=labels )
One option is
plot( runif(10), runif(10) )
legend( x='top', fill=grey.colors(2), bty='n', ncol=2, inset=.1,
legend=c( expression( atop("Hello world\nGoodbye world",64 %/% 8 %/% 8) ),
'something else' ) )
or
plot( runif(10), runif(10) )
legend( x='top', fill=grey.colors(2), bty='n', ncol=2, inset=.1,
legend=c( expression( atop(atop("Hello world","Goodbye world"),64 %/% 8 %/% 8) ),
'something else' ) )
But really R doesn't like to use new-lines in ?plotmath
mode. If you need finder control over your legends, you are better off exporting as pdf and fine editing in Adobe Illustrator or something.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With