plotmath              package:grDevices              R Documentation

_M_a_t_h_e_m_a_t_i_c_a_l _A_n_n_o_t_a_t_i_o_n _i_n _R

_D_e_s_c_r_i_p_t_i_o_n:

     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).

_D_e_t_a_i_l_s:

     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 + y'                         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'                      capital upsilon with hook
       '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'. 
     'vartheta', 'varphi' and 'varsigma' are allowed as synonyms for
     'theta1', 'phi1' and 'sigma1'.

     'sigma1' is also known as 'stigma', its Unicode name.

_R_e_f_e_r_e_n_c_e_s:

     Murrell, P. and Ihaka, R. (2000) An approach to providing
     mathematical annotation in plots. _Journal of Computational and
     Graphical Statistics_, *9*, 582-599.

_S_e_e _A_l_s_o:

     'demo(plotmath)', 'axis', 'mtext', 'text', 'title', 'substitute'
     'quote', 'bquote'

_E_x_a_m_p_l_e_s:

     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)

