2010年03月14日 Rとlatex
_ latexの式をepsに
グラフを書くときにはRを使っているが、Rで書いたグラフの欠点の一つに、数式などの表記が美しくないという点が挙げられる。expressionとpasteを使えば、いろいろな式を表現することができるが、見栄えがあまり良くない。psfragを使うとRで書いたグラフにlatexの文字を埋め込むことができるようなので、試してみた。まず、比較のためにRでグラフを書いてみる。x<-seq(from=0, to=7, by=0.01) y<-sin(x) xl<-c(0,2*pi) yl<-c(-1,1) X11(width=100/25.4,height=80/25.4) par(bg=rgb(0.99,0.99,0.99),fg="black") par(tcl=0.5,xaxs="i",yaxs="i") par(mar=c(3,4,1,1)) par(las=1,ps=11) plot(x,y,type="l",xlim=xl,ylim=yl,ann=FALSE,axes=FALSE) box() axis(1,at=c(0,pi,2*pi),labels=c(0,expression(pi),expression(2*pi)),padj=-1) axis(2,labels=TRUE) axis(3,at=c(0,pi,2*pi),labels=FALSE) axis(4,labels=FALSE) mtext(expression(italic(x)),side=1,line=2) mtext(expression(italic(y)),side=2,line=3) text(4,0.5,expression(paste(italic(y),"=",sin," ",italic(x)))) dev.copy2eps(file="sin.eps")最近は、こんな感じで書いたグラフをepsにして、latexに取り込んでいる。いよいよpsfragで処理するために、もとになるepsを作る。
x<-seq(from=0, to=7, by=0.01) y<-sin(x) xl<-c(0,2*pi) yl<-c(-1,1) X11(width=100/25.4,height=80/25.4) par(bg=rgb(0.99,0.99,0.99),fg="black") par(tcl=0.5,xaxs="i",yaxs="i") par(mar=c(3,4,1,1)) par(las=1,ps=11) plot(x,y,type="l",xlim=xl,ylim=yl,ann=FALSE,axes=FALSE) box() axis(1,at=c(0,pi,2*pi),labels=c("l1","l2","l3"),padj=-1) axis(2,labels=TRUE) axis(3,at=c(0,pi,2*pi),labels=FALSE) axis(4,labels=FALSE) mtext("x",side=1,line=2) mtext("y",side=2,line=3) text(4,0.5,"title") dev.copy2eps(file="sintex.eps")これはほとんど同じなのだが、文字は置き換えるために、単純な文字列にしている。そして、このepsをpsfragを使ってlatexで処理する。
\documentclass[11pt]{jarticle} \usepackage[dvips]{graphicx} \usepackage{psfrag} \pagestyle{empty} \begin{document} \psfrag{title}{$y=\sin x$} \psfrag{x}{$x$} \psfrag{y}{$y$} \psfrag{l1}{$0$} \psfrag{l2}{$\pi$} \psfrag{l3}{$2\pi$} \includegraphics{sintex.eps} \end{document}このファイルをplatex, dvips, ps2epsで処理すると、文字がlatexの文字で置換されたepsファイルができる。このdiaryには基本的には図は載せないことにしているので、見せることができないが、出来上がった二つの図を比較してみると、やはりlatexの文字は綺麗だと感じる。ただし、y軸の数字は置換していないので、Rのフォントになってしまっていて、少し違和感がある。picture環境で図と文字を配置しても同じようなことができる気もするが、psfragも有用な手法だと感じる。