グラフィックス参考実例集:数式のプロット
タイトル等の注釈に expression, substitute 関数の引数として数式表現を与えることにより数式のプロットが可能になる。使える記号や品位は限られており、数式・記号の完全な制御には pictex ドライバーを用い、latex コードに落し、マニュアルで編集する。
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)), line= .25) for(i in 2:9) text(i, i+1, substitute(list(xi, eta) == group("(",list(x,y),")"), list(x = i, y = i+1))) ## note that both of these use calls rather than expressions. ## text(1, 10, "Derivatives:", adj = 0) text(1, 9.6, expression( " first: {f * minute}(x) " == {f * minute}(x)), adj = 0) text(1, 9.0, expression( " second: {f * second}(x) " == {f * second}(x)), adj = 0)
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)
## some other useful symbols plot.new(); plot.window(c(0,4), c(15,1)) text(1, 1, "universal", adj = 0); text(2.5, 1, "\\042") text(3, 1, expression(symbol("\042"))) text(1, 2, "existential", adj = 0); text(2.5, 2, "\\044") text(3, 2, expression(symbol("\044"))) text(1, 3, "suchthat", adj = 0); text(2.5, 3, "\\047") text(3, 3, expression(symbol("\047"))) text(1, 4, "therefore", adj = 0); text(2.5, 4, "\\134") text(3, 4, expression(symbol("\134"))) text(1, 5, "perpendicular", adj = 0); text(2.5, 5, "\\136") text(3, 5, expression(symbol("\136"))) text(1, 6, "circlemultiply", adj = 0); text(2.5, 6, "\\304") text(3, 6, expression(symbol("\304"))) text(1, 7, "circleplus", adj = 0); text(2.5, 7, "\\305") text(3, 7, expression(symbol("\305"))) text(1, 8, "emptyset", adj = 0); text(2.5, 8, "\\306") text(3, 8, expression(symbol("\306"))) text(1, 9, "angle", adj = 0); text(2.5, 9, "\\320") text(3, 9, expression(symbol("\320"))) text(1, 10, "leftangle", adj = 0); text(2.5, 10, "\\341") text(3, 10, expression(symbol("\341"))) text(1, 11, "rightangle", adj = 0); text(2.5, 11, "\\361") text(3, 11, expression(symbol("\361")))
構文 | 意味 | 構文 | 意味 |
`x + y' | x plus 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 | `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 |
`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 |