EPS形式の出力
ここではグラフィックウィンドウに描画されているグラフを EPS 形式で出力する際のオプションの実際を紹介します。eps ファイルの加工方法についてはこちら。作成したepsファイルをLaTeXに取り込む方法は、こちら
> dev.copy2eps(file="ファイル名.eps")
表示されているグラフィックが EPSF 形式で保存されます。dev.copy2epsは内部的に、
> dev.copy(device=postscript,file="ファイル名.eps", onefile=FALSE,horizontal=FALSE,paper=special)
と同じことをしている。いちいちオプションを指定するのは面倒なので、dev.copy2epsを使った方が楽。
> dev.copy2eps(file="ファイル名.eps",width=数値,height=数値)
幅や高さを指定できる。幅と高さのどちらか一方のみを指定すると、コピー元のアスペクト比で他方を自動的に決定してくれる。指定する数値の単位はインチ。
例 横幅を4インチにする場合
> dev.copy2eps(file="width-test.eps",width=4)
> dev.copy2eps(file="ファイル名.eps",family="フォント名")
標準ポストスクリプトフォント | AvantGarde |
Bookman | |
Courier | |
Helvetica | |
Helvetica-Narrow | |
NewCenturySchoolbook | |
Palatino | |
Times | |
URWフォント | URWGothic |
URWBookman | |
NimbusMon | |
NimbusSan | |
NimbusSanCond | |
CenturySch | |
URWPalladio | |
NimbusRom | |
その他 | ComputerModern |
epsfont <- function(x) { plot(0:2,0:2,type="n",axes=FALSE,xlab="",ylab="") text(0,1.9,x,cex=5,font=1,pos=4) #標準 text(0,1.6,x,cex=5,font=2,pos=4) #太字 text(0,1.3,x,cex=5,font=3,pos=4) #斜体 text(0,1,x,cex=5,font=4,pos=4) #太字斜体 text(0,0.7,"0123456789",cex=3,pos=4) dev.copy2eps(file=paste(x,".eps",sep=''),family=x) system(paste("convert -trim ",x,".eps ",x,".png",sep='')) #ImageMagickのtrimオプションを使う }
このepsfont()を使って表示してみる。
> epsfont("AvantGarde")
> epsfont("Bookman")
> epsfont("Courier")
familyを無指定の時に適用されるデフォルトのフォント
> epsfont("Helvetica")
> epsfont("Helvetica-Narrow")
> epsfont("NewCenturySchoolbook")
> epsfont("Palatino")
> epsfont("Times")
> epsfont("URWGothic")
> epsfont("URWBookman")
> epsfont("NimbusMon")
> epsfont("NimbusSan")
> epsfont("NimbusSanCond")
> epsfont("CenturySch")
> epsfont("URWPalladio")
> epsfont("NimbusRom")
> epsfont("ComputerModern")
点の大きさを指定できる
何故だがpointsizeを大きくすると描画領域が小さくなる。
これはグラフィックのmainオプションとは異なり、EPSファイルの中に書き込まれるタイトル。例えば、
> dev.copy2eps(title="ADIS mortality in Honduras")
として、出力されたEPSファイルの中を見ると
%!PS-Adobe-3.0 EPSF-3.0 %%DocumentNeededResources: font Helvetica %%+ font Helvetica-Bold %%+ font Helvetica-Oblique %%+ font Helvetica-BoldOblique %%+ font Symbol %%Title: ADIS mortality in Honduras %%Creator: R Software %%Pages: (atend) %%BoundingBox: 0 0 268 263 %%EndComments
となっている。
簡単にグレー階調になってくれないグラフィック関数を使っているとき、グレー階調に指定し直すのに手間がかかるとき、または、カラーとグレー階調のepsを両方とも同時に欲しいとき、dev.copy2epsのfileにパイプを書いて、外部プログラムに処理を渡します。
カラーのepsをグレー階調にするbw_convertというPerlスクリプトがありますが、これは引数に変換元ファイル名を与える必要があり、パイプに対応していません。パイプに対応していないと、dev.copy2eps()からは直接利用できないため、bw_convertのアイデアを拝借して、sedで対応します。
> pie(c(2,10,3),c("S","R","S-plus")) > dev.copy2eps(file="カラー.eps") > dev.copy2eps(file="| sed -e 's/\bsetrgbcolor\b/add add 3 div setgray/g' > グレー階調.eps")
また、ImageMagickのconvertを使う方法もあります。
> dev.copy2eps(file="| convert -type Grayscale - グレー階調.eps")
Rによるeps出力は、フォントを埋め込まずベクター形式で、大変軽いファイルになっています。しかし、convertで変換すると、ラスター化されるので、見栄えは似ていますが、ファイルサイズがときに100倍近くにふくれあがるので注意が必要です。
プレゼンテーション用に色を反転させたグラフィックも同時に欲しくなるかもしれません。グレー階調化と同様にsedでepsファイルを編集します。
ここでは、昔懐かしいブルースライドにしてみます。
> par(bg='white') #背景色設定をepsに入れないと、そもそも背景色の変更ができない > pie(c(2,10,3),c("S","R","S-plus")) > dev.copy2eps(file="カラー.eps") > blue.slide <- paste("| sed -e 's/\\bsetrgbcolor\\b/pop pop pop 0 0 0.6 setrgbcolor/g'", + "-e 's/\\b1 setgray\\b/0 0 0.6 setrgbcolor/g'", + "-e 's/\\b0 setgray\\b/1 setgray/g' > スライド.eps") #長いのでpaste()を使う > dev.copy2eps(file=blue.slide)