| plotmath {grDevices} | R Documentation |
If the text argument to one of the text-drawing functions
(text, mtext, axis) in R
is an expression, the argument is interpreted as a mathematical
expression and the output will be formatted according to TeX-like
rules. Expressions can also be used for titles, subtitles and
x- and y-axis labels (but not for axis labels on persp plots).
A mathematical expression must obey the normal rules of syntax for any R expression, but it is interpreted according to very different rules than for normal R expressions.
It is possible to produce many different mathematical symbols, generate sub- or superscripts, produce fractions, etc.
The output from demo(plotmath) includes several tables which
show the available features. In these tables, the columns of grey text
show sample R expressions, and the columns of black text show the
resulting output.
The available features are also described in the tables below:
| Syntax | Meaning |
| | x plus y |
x - y | x minus y |
x*y | juxtapose x and y |
x/y | x forwardslash y |
x %+-% y | x plus or minus y |
x %/% y | x divided by y |
x %*% y | x times y |
x[i] | x subscript i |
x^2 | x superscript 2 |
paste(x, y, z) | juxtapose x, y, and z |
sqrt(x) | square root of x |
sqrt(x, y) | yth root of x |
x == y | x equals y |
x != y | x is not equal to y |
x < y | x is less than y |
x <= y | x is less than or equal to y |
x > y | x is greater than y |
x >= y | x is greater than or equal to y |
x %~~% y | x is approximately equal to y |
x %=~% y | x and y are congruent |
x %==% y | x is defined as y |
x %prop% y | x is proportional to y |
plain(x) | draw x in normal font |
bold(x) | draw x in bold font |
italic(x) | draw x in italic font |
bolditalic(x) | draw x in bolditalic font |
list(x, y, z) | comma-separated list |
... | ellipsis (height varies) |
cdots | ellipsis (vertically centred) |
ldots | ellipsis (at baseline) |
x %subset% y | x is a proper subset of y |
x %subseteq% y | x is a subset of y |
x %notsubset% y | x is not a subset of y |
x %supset% y | x is a proper superset of y |
x %supseteq% y | x is a superset of y |
x %in% y | x is an element of y |
x %notin% y | x is not an element of y |
hat(x) | x with a circumflex |
tilde(x) | x with a tilde |
dot(x) | x with a dot |
ring(x) | x with a ring |
bar(xy) | xy with bar |
widehat(xy) | xy with a wide circumflex |
widetilde(xy) | xy with a wide tilde |
x %<->% y | x double-arrow y |
x %->% y | x right-arrow y |
x %<-% y | x left-arrow y |
x %up% y | x up-arrow y |
x %down% y | x down-arrow y |
x %<=>% y | x is equivalent to y |
x %=>% y | x implies y |
x %<=% y | y implies x |
x %dblup% y | x double-up-arrow y |
x %dbldown% y | x double-down-arrow y |
alpha – omega | Greek symbols |
Alpha – Omega | uppercase Greek symbols |
theta1, phi1, sigma1, omega1 | cursive Greek symbols |
Upsilon1 | cursive capital upsilon |
infinity | infinity symbol |
partialdiff | partial differential symbol |
32*degree | 32 degrees |
60*minute | 60 minutes of angle |
30*second | 30 seconds of angle |
displaystyle(x) | draw x in normal size (extra spacing) |
textstyle(x) | draw x in normal size |
scriptstyle(x) | draw x in small size |
scriptscriptstyle(x) | draw x in very small size |
underline(x) | draw x underlined |
x ~~ y | put extra space between x and y |
x + phantom(0) + y | leave gap for "0", but don't draw it |
x + over(1, phantom(0)) | leave vertical gap for "0" (don't draw) |
frac(x, y) | x over y |
over(x, y) | x over y |
atop(x, y) | x over y (no horizontal bar) |
sum(x[i], i==1, n) | sum x[i] for i equals 1 to n |
prod(plain(P)(X==x), x) | product of P(X=x) for all values of x |
integral(f(x)*dx, a, b) | definite integral of f(x) wrt x |
union(A[i], i==1, n) | union of A[i] for i equals 1 to n |
intersect(A[i], i==1, n) | intersection of A[i] |
lim(f(x), x %->% 0) | limit of f(x) as x tends to 0 |
min(g(x), x > 0) | minimum of g(x) for x greater than 0 |
inf(S) | infimum of S |
sup(S) | supremum of S |
x^y + z | normal operator precedence |
x^(y + z) | visible grouping of operands |
x^{y + z} | invisible grouping of operands |
group("(",list(a, b),"]") | specify left and right delimiters |
bgroup("(",atop(x,y),")") | use scalable delimiters |
group(lceil, x, rceil) | special delimiters |
Note to TeX users: TeX's \Upsilon is Upsilon1, TeX's
\varepsilon is close to epsilon, and there is no
equivalent of TeX's \epsilon. TeX's \varpi is close to
omega1.
Murrell, P. and Ihaka, R. (2000) An approach to providing mathematical annotation in plots. Journal of Computational and Graphical Statistics, 9, 582–599.
demo(plotmath),
axis,
mtext,
text,
title,
substitute
quote, bquote
x <- seq(-4, 4, len = 101)
y <- cbind(sin(x), cos(x))
matplot(x, y, type = "l", xaxt = "n",
main = expression(paste(plain(sin) * phi, " and ",
plain(cos) * phi)),
ylab = expression("sin" * phi, "cos" * phi), # only 1st is taken
xlab = expression(paste("Phase Angle ", phi)),
col.main = "blue")
axis(1, at = c(-pi, -pi/2, 0, pi/2, pi),
labels = expression(-pi, -pi/2, 0, pi/2, pi))
## How to combine "math" and numeric variables :
plot(1:10, type="n", xlab="", ylab="", main = "plot math & numbers")
theta <- 1.23 ; mtext(bquote(hat(theta) == .(theta)))
for(i in 2:9)
text(i,i+1, substitute(list(xi,eta) == group("(",list(x,y),")"),
list(x=i, y=i+1)))
plot(1:10, 1:10)
text(4, 9, expression(hat(beta) == (X^t * X)^{-1} * X^t * y))
text(4, 8.4, "expression(hat(beta) == (X^t * X)^{-1} * X^t * y)",
cex = .8)
text(4, 7, expression(bar(x) == sum(frac(x[i], n), i==1, n)))
text(4, 6.4, "expression(bar(x) == sum(frac(x[i], n), i==1, n))",
cex = .8)
text(8, 5, expression(paste(frac(1, sigma*sqrt(2*pi)), " ",
plain(e)^{frac(-(x-mu)^2, 2*sigma^2)})),
cex = 1.2)