プロット上に数式を書きたいと思ったら、expressionが使えるが、loop回したり複雑な式を書きたいと思ったらsubstituteが使える。
例にあるやつを全部やって、そのあと複雑に式を並べたやつをごっそりやってみる。
テキストを用意したらparseしてsubstituteに流す。
# データ x + y x*y x/y x %+-% y x %/% y x %*% y x[i] x^2 paste(x, y, z) sqrt(x) sqrt(x, y) x == y x != y x < y x <= y x > y x >= y x %~~% y x %=~% y x %==% y x %prop% y plain(x) bold(x) italic(x) bolditalic(x) list(x, y, z) ... cdots ldots x %subset% y x %subseteq% y x %notsubset% y x %supset% y x %supseteq% y x %in% y x %notin% y hat(x) tilde(x) dot(x) ring(x) bar(xy) widehat(xy) widetilde(xy) x %<->% y x %->% y x %<-% y x %up% y x %down% y x %<=>% y x %=>% y x %<=% y x %dblup% y x %dbldown% y alpha~~omega Alpha~~Omega infinity partialdiff 32*degree 60*minute 30*second displaystyle(x) textstyle(x) scriptstyle(x) scriptscriptstyle(x) x ~~ y x + phantom(0) + y x + over(1, phantom(0)) frac(x, y) over(x, y) atop(x, y) sum(x[i], i==1, n) prod(plain(P)(X==x), x) integral(f(x)*dx, a, b) union(A[i], i==1, n) intersect(A[i], i==1, n) lim(f(x), x %->% 0) min(g(x), x > 0) inf(S) sup(S) x^y + z x^(y + z) x^{y + z} group("(",list(a, b),"]") bgroup("(",atop(x,y),")") group(lceil, x, rceil)
subs<- read.delim("clipboard", header=FALSE) texts <- c(t(subs)) par(mar=c(0, 3, 0, 2)) plot(1, xlim=c(1, 5), ylim=c(1, 18), type="n", axes=FALSE, frame=FALSE, xlab="", ylab="") for(i in seq(texts)){ text((i-1)%%5+1, (i-1)%/%5+1, parse(text=texts[i]), cex=2, xpd=TRUE) }
sub <- substitute( group("{", list(alpha, beta, atop(gamma, delta), zeta*theta~iota~~kappa, frac(sum(bolditalic(i), i==1, n),integral(italic(f(x)*dx), a,b)), widetilde(xy), x %in% y, italic(Delta*S[a]%~~%hat(x)), bgroup("{", frac(1, 2), "}") ), "]") ) par(mar=c(0, 0, 0, 0)) plot(1, type="n", axes=FALSE, frame=FALSE, xlab="", ylab="") text(mean(par()$usr[1:2]), mean(par()$usr[3:4]), sub, cex=2)