yokaのblog

湖で微生物の研究してます

Rでのtsv読み込み、pdf書き出し

何度もやっていることなのに久しぶりにやるといつも忘れているので備忘で書いておく。


色々な宗派があるけど、僕はRで論文のFigを作る時、tsv(タブ区切りテキストテーブル)で保存したデータをRで読み込んで図を作って、pdfで保存、イラストレーターで編集する方法を使っている。

■tsvをデータフレームとして読み込む方法

read.table(file="ファイル名.tsv", sep="\t",
           header=T       #1行目を列名として取り込む場合
           row.names=1    #1列目を行名として取り込む場合
           )
#ちなみにread.delimを使えば header=T, sep="\t", quote="\"", dec="." がデフォルトで設定されるので、一般的なtsvならこちらのほうが便利

■データフレームをtsvに書き出す方法

write.table("データフレーム名", file="ファイル名", sep = "\t", 
             na="",        #NAを空白にしたい場合
             row.names=F #列名(ヘッダ行)のみ残す場合。行名・列名いずれも残したい場合は row.names=T, col.names=NA
             quote=F  #ダブルクォーテーションを出力しない
             )

■作図結果をpdf/epsで書き出す方法

graphics.off() # 不要な作図デバイスが残っているとエラーになるので消しておく
pdf(file="ファイル名.pdf", width=210/25.4, height=297/25.4, family="sans",useDingbats=F) 
#A4サイズ、sansフォント、pdfで出力する場合。
#ちなみにepsで出力したい場合はpostscript(file="ファイル名.eps",width=210/25.4, height=297/25.4) で同じように出力できる
#複数の作図関数を入れることで複数ページのpdfを作成できる

#######################################
###############作図の関数###############
#######################################

dev.off() #作図デバイスを閉じる

useDingbats=Fは、プロットの点をフォント化するのを防ぐためのオプションで、デフォルトの設定だと、プロットのポイントがオブジェクトではなく文字「●」で出力されることがあって、フォントの設定によっては、編集しようとIllustratorで開いた瞬間に点の位置がわずかにずれるということが起こるので、それを防ぐために設定する。epsの場合はこの設定は必要ない一方で、長い文字列が二つ以上のオブジェクトに分割されてしまう現象が頻発して、編集するときに不都合な場合がある。
ちなみにこの方法だといちいち出力したpdf/epsを開かないと図を確認することができないのだけど、pdf()のところを

win.graph(width=15, height=10)

と変えれば指定したサイズのウィンドウが立ち上がるので、アウトプットを確認しながら作業を進めることができる(windowsの場合)。
さらにそこから

dev.copy2pdf(file="ファイル名.pdf") #pdfの場合
dev.copy2eps(file="ファイル名.eps") #epsの場合

とすることで、作図ウィンドウ上の図をepsに保存することもできる。
ただこの方法だと、ウィンドウサイズの違いで微妙にずれたり、表示されたりされなかったりする部分の制御が難しいので、win.graph()は作図内容の確認にとどめて、本番の出力はpdf()を使うほうが良いと思う。