Nzuri
Nzuri

Reputation: 61

How to use more than one expression in a row

I am new to R and I am trying to figure out, how to write something like "This is my plot for (\n)8 <=(less than or equal) x <= 10" in my plot-title.

I tried something like this:

plot(1:10, main="Hey, guys, this is my plot for \n")
mtext(c(expression(8 <= x),expression(x <= 10), side=3)

This gives not exactly what I want but "8 (less or equal) x x (less or equal) 10", and those two expressions are printed in a line below the main title, (which is pretty cool) but in the same place, which is pretty much useless :)

I also tried:

plot(1:10, main=bquote(paste(8 <= x, x <= 10, sep=",")))

What kind of does what I want (except the seperator seems to be completely ignored), but I cant add further text. Output: "8 (less or equal) xx (less or equal) 10".

And when I tried

plot(1:10, main=paste("x",bquote(paste(x <= 8,z <= 10,sep=" ")),sep=" "))

the output irritated me completely: the title was: "xpaste (\n) x x <= 8 (\n) x z <= 10 (\n) x" (the (\n) is a line break, the other characters are exactly what is printed)

So is there a possibility to print expressions with more than one operator?

Upvotes: 5

Views: 540

Answers (3)

G. Grothendieck
G. Grothendieck

Reputation: 269371

Try this:

 plot( 1:10, main = ~ bold(atop("Hey, guys, this is my plot for", {"8" <= x} <= "10")))

On the windows() device it looks like this: screenshot

REVISED spacing and made 2nd line a bit larger to match first line. Added rbatt's atop idea. Further simplification.

Upvotes: 4

rbatt
rbatt

Reputation: 4797

heyTitle <- bquote(atop(
    "Hey, guys, this is my plot for",
    {8 <=x}*phantom()<=10
    ))

plot(1:10, main=heyTitle)

Thanks to this answer for the atop() trick.

EDIT: Here is the figure

EDIT 2: borrowing from another answer by G. Grothendieck to use brackets to fix spacing.

enter image description here

Upvotes: 4

MrFlick
MrFlick

Reputation: 206167

Expressions are a bit goofy, but here is how you can do that

plot(1:10, main="Hey, guys, this is my plot for \n")
mtext(expression(paste(8 <= x,", ",x <= 10)), side=3)

To get a vector of expressions, you just use expression(exp1,exp2,exp3). No need to bother with c() or list(). And then to mix expressions with text, paste() often comes in handy. Without paste to combine them as one expression, they will plot on top of each other at the same location.

Upvotes: 3

Related Questions