Unicodeをfigureに読み込む

Rでfigureを作る際に,文字や数字,数式を埋め込みたいことがある.例えば,下の図のように,≤(以下)という記号を入れることを考える.

一つのやり方は日本語で「数学」と打ち込み,「≤」の記号を出すという手がある.この方法は環境依存ではあり,システムによってはきちんと表示されないケースもあるが,手元のWindows環境で試してみたところうまくいった.

二つ目のやり方としてexpression関数がある.expression関数は上付きや下付きの数字や,数式をfigure上に書くことのできる関数であり,相当に複雑なものにも対応している.例えば下ではEuler法の数式をtitle関数で埋め込んだものである.

x=seq(0.8,2.2,by=0.1)
xaxis_value=c(1,2)
xaxis_label=c(expression(x),expression(x+h))
yaxis_value=c(exp(1),exp(2))
yaxis_label=c(expression(y(x)),expression(y(x+h)))
plot(x,exp(x),type='l',lwd=3,xlab='',ylab='',xlim=c(0.8,2.2),ylim=c(exp(0.8),exp(2.2)),xaxt='n',yaxt='n')
title(main=expression(paste("y(x+h)"%~~%"y(x) + h ",frac(dy,dx),"(x)")),cex.main=1.1)
axis(1,xaxis_value,xaxis_label)
axis(2,yaxis_value,yaxis_label,las=2)
points(1,exp(1),pch=16,cex=1.5)
points(2,exp(2),pch=16,cex=1.5)
segments(1,exp(0.8),1,exp(1),lty=2)
segments(0.8,exp(1),1,exp(1),lty=2)
segments(0.8,exp(2),2,exp(2),lty=2)

# first order approximation
points(2,2*exp(1),pch=16,cex=1.5,col='blue')
segments(1,exp(1),2,2*exp(1))
segments(2,exp(0.8),2,2*exp(1),lty=3,col='blue')
segments(0.8,2*exp(1),2,2*exp(1),lty=3,col='blue')

expression関数の使い方の詳細は別の記事でするが,expression関数内でtexのコードを書くことで,だいたい数式が再現できる.

上のやり方でももちろんいいが,三つ目のやり方としてunicodeをそのままRに読み込むという手がある.これも環境依存することがあるが,非常にキレイな記号を描くことができるのでおススメ.「≤」の記号はunicodeでは\u2264で表示することができ,下のように書けばよい.

x <- 1:10
y <- 1:10
plot(x, y, pch="\u2264", cex=4)

数学記号以外でも,unicodeとして登録されているものは呼び出すことができるようで,下のような記号も出すことができる.実際の論文等で使うには適当でないものも多いが,通常のpchに飽きたら使ってみてもよいのかも.

y <- 1:5
Pch <- c("\u2600", "\u2601", "\u2602", "\u2603", "\u2604", 
         "\u260A", "\u260B", "\u260C", "\u260D", "\u260E", 
         "\u2620", "\u2621", "\u2622", "\u2623", "\u2624",
         "\u262A", "\u262B", "\u262C", "\u262D", "\u262E",
         "\u2615", "\u2692", "\u2693", "\u2694", "\u2695")
plot(0, 0, pch="", xlim=c(0.5,5.5), ylim=c(0.5,5.5))
for (i in 1:5){
  points(rep(i,5), y, pch=Pch[(1+5*(i-1)):(5+5*(i-1))], cex=5)
}

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です