星空研究Memo

ここは某天文屋の外部記憶装置である。

R: 最近の作図

2013-04-27 01:03:21 | R言語

R でグラフを描くさい、見栄えなどにこだわりだすと
気が付けばもの凄い時間が経っていたりする(w
出来上がったコードはコピペすれば色々な局面で応用が利くので
最近使っているものを(部分的に)メモしておくなり。 

私の場合、スペクトルのグラフを描く機会が多い。
ライトカーブも連続測光した場合はクイックルック用にグラフを作りますが、
こちらはあまり見栄えなどはこだわっていない。

スペクトルのグラフ(気合いれた版)は T Pyx 論文で描いたような図が
最近のブームになっていて、ここ一年近く研究会の集録原稿などでも応用して使ってます。

以下は某新星の一晩分のスペクトルを作図したさいのコード。
フォントはデフォルトではなく、 Times 系を使うのがお気に入りです。


=====

  setEPS()                                          # EPS で出力
  postscript("nova_hogehoge.eps",          # 出力ファイル名
                family="Times",                       # フォント
               height = 6, width = 7)              # グラフの大きさ            

  par(tcl=0.4,lwd=2,ps=11)                     # 目盛の長さ、枠線、文字サイズなどの指定
  plot(data, type="l", axes=F,                  # 外枠や軸はあとでプロットするのでaxes=F
     cex.lab=1.2,lab=c(7,7,8),
   xlab=expression(wavelength (ring(A))),  # 横軸の波長Å
   ylab="log10(flux) + const.", col="red", lwd=1,xlim=c(4000,8500),ylim=c(0,2.5))

# gnuplot みたいに上下左右に目盛り線が欲しい場合は以下の通り。 

  axis(1, lwd.ticks=2)                               # 軸を描く
  axis(2, lwd.ticks=2,las=1)                      # las=1 は縦軸の数字を横書きにする
  axis(3, lwd.ticks=2,lab=F)                      
  axis(4, lwd.ticks=2,lab=F)
  box()                                                   # 外枠を描く

# 以下、スペクトル線の元素を示す場合に使う。
# text (横軸位置, 縦軸位置, "出力文字", ...) を使う。
# srt=90 は文字を90°回転させている。 

  text(6563,2.4,expression(paste("H",alpha)),srt=90,cex=1.2)     # Balmer
  text(4861,2.0,expression(paste("H",beta)),srt=90,cex=1.2)
  text(4340,2.0,expression(paste("H",gamma)),srt=90,cex=1.2)

  text(6300,1.5,"[O I]",srt=90,cex=1.2)   # [O I]
  text(7773,1.5,"O I",srt=90,cex=1.2)     # O I

# 以下、スペクトル1本のときはあまり使わないけど紹介。
# あるスペクトル線を点線などで強調したい場合は abline を使っている。
# 複数のスペクトルをオフセットして並べ、ラインの変化などを見るとき便利。

 abline(v=6563,lty=2,lwd=1)    # H-alpha
 abline(v=7773,lty=2,lwd=1)    # O I

# abline(v=強調したい波長, ...)、となっている。
# つまり指定した横軸の値に対して垂線が引かれる。 
# この点線は黒色で多様すると見栄えが微妙になることもある。
# 灰色など控えめの色を使うと幸せになれるかもしれない。 

  dev.off()

======


とまぁ、 実際プロットした例図(スペクトル)をここに UP できれば良いのですが、
ブログでは割愛します (^^;
あと T Pyx 論文では補助目盛を使っていて、  
 

=====

  xm <- seq(3800,9000,by=100)
   axis(1,xm,lab=F,tcl=0.4)
   axis(3,xm,lab=F,tcl=0.4)
  ym <- seq(0,8,by=0.2)
   axis(2,ym,lab=F,tcl=0.4)
   axis(4,ym,lab=F,tcl=0.4)

=====

という感じで刻むことができる。この場合、主目盛の長さは tcl=0.6 くらいあると
良いかもしれない。このあたりは好みの問題でしょうか。

横軸を共有して二つのグラフを合体させたい場合の方法は、一度ブログで紹介しています。 
T Pyx 論文では plot() の前に以下のおまじないを唱えました。

=====
# グラフのレイアウトを行列で考える(一つの図の大きさの割合)

   mat <- matrix(c(1,1,1,1,2,2,2,2), # グラフのレイアウトを行列で考える(一つの図の大きさの割合)
               8,1,byrow=T)

   setEPS()  
   postscript("tpyx_spectra.eps",family="Times",
            height=9,width =9)

     par(mfrow=c(2,1))    # 実際のグラフ数を 2x1 として縦に並べる
     layout(mat)
     par(mar=c(0,4,0,4))  # 各グラフをぴったり接続するおまじない(上下マージン0)
===== 

 


最新の画像もっと見る

post a comment