29

How can I combine text and math expressions in a plot's title. If I use paste the expression is converted to character. For example I want something like this as a title

$ARL_1$ curve for $S^2$

Thank you

3 Answers 3

34

You want to read ?plotmath to see how to do this sort of thing. Here is an example:

plot(1:10, main = expression(ARL[1] ~ "curve for" ~ S^2))

The [.] is subscript, whilst ^ gives superscript. The ~ spaces out the parts of the expression as if there were literal spaces.

Edit: normally I would have done:

plot(1:10, main = expression(ARL[1] ~ curve ~ for ~ S^2))

but that throws an error because for is being interpreted as the start of a for() loop call.

Sign up to request clarification or add additional context in comments.

3 Comments

Second will work if you use expression(ARL[1] ~ curve ~ "for" ~ S^2).
@Marek: Oh, yes, agreed. But if you are going to do "for" you might as well do "curve for", unless ~ and " " are different amounts of space...?
Of course. It matters in more complicated cases when one needs to mixed more strings. I add it as completeness ;) On other hand you could also use back-ticks `.
33

You can also use bquote(paste(...)), which is a little more flexible than expression: you can include variable values (say, the value of x) in the labels with .(x). For example:

x<- 232323
plot(1:10, main = bquote(paste(ARL[1], " curve for ", S^2, "; x=",.(x))))

5 Comments

Yes although I generally find that using the plotmath paste function confuses more than it helps. Try > x<- 232323 > plot(1:10, main = bquote(ARL[1]~"curve for"~S^2~";"~x==.(x)))
+1 Dwin - introducing paste is a pain in the but if you get your , or "" in the wrong places...
@GavinSimpson Yeah, your answer is nicer. But I thought it would be good to point out a more flexible solution in case somebody comes here looking for a more general solution.
+1 from me. That comment wasn't a criticism of the substantive point of your answer (bquote()), just a point about introducing paste in there if you can avoid it. bquote() is underused and very powerful!
.. another 1+ from me. I thought bquote was an excellent suggestion and only added a very minor demurral to avoid paste when possible, because it often gets confused with that "other paste". People don't realize it's a different function with different sematics and with no sep argument.
3

You can also use latex2exp::TeX to convert TeX to expressions on the fly:

plot(cars, main = TeX("$ARL_1$ curve for $S^2$"))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.