substituteで数式のプロット

MikuHatsune2014-01-09

プロット上に数式を書きたいと思ったら、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)